Ještě řeším jeden problém - nejde mi tento příkaz
static void write(cv::FileStorage& fs, const std::string&, const MyData& x)
Vygeneruje to chyby:
C4430: missing type specifier - int assumed. Note: C++ does not support default-int
C2143: syntax error : missing ',' before '&'
C2065: 'x' : undeclared identifier
C2228: left of '.write' must have class/struct/union
V headeru nic není a cpp je toto:
#include "mydata_class.h"
using namespace std;
using namespace cv;
class MyData
{
public: // Data Members
int A;
double X;
string id;
// Copy constructor
MyData() : A(0), X(0), id() {}
// explicit to avoid implicit conversion
explicit MyData(int) :
A(97), X(CV_PI), id("mydata1234") {}
// Write serialization for this class
void write(cv::FileStorage& fs) const
{
fs << "{" << "A" << A << "X" << X << "id" << id << "}";
}
void read(const cv::FileNode& node) //Read serialization for this class
{
A = (int) node["A"];
X = (double) node["X"];
id = (string) node["id"];
}
};
A teď si říkám, že header má deklarovat a cpp definovat. Takže je to špatně, protože deklaruju tu třídu 2x.
Ale není mi jasné jak přezapsat toto:
MyData() : A(0), X(0), id() {}
// explicit to avoid implicit conversion
explicit MyData(int) :
A(97), X(CV_PI), id("mydata1234") {}
Mám to přesunout do headeru nebo psát definici takto?
MyData::MyData() : A(0), X(0), id() {}
MyData::MyData(int) : A(97), X(CV_PI), id("mydata1234") {}