这是我在OpenCV教程(源https://github.com/Itseez/opencv/blob/master/samples/cpp/tutorial_code/core/file_input_output/file_input_output.cpp)中找到的一段代码。因为代码都在一个文件中,所以我尝试将它分成header和cpp。我的问题是我无法找到如何正确地做到不生成错误C4430:缺少类型说明符 - 假设的int。注意:C ++不支持default-int。
class MyData
{
public:
MyData() : A(0), X(0), id() {}
explicit MyData(int) : A(97), X(CV_PI), id("mydata1234") // explicit to avoid implicit conversion
{}
void write(FileStorage& fs) const //Write serialization for this class
{
fs << "{" << "A" << A << "X" << X << "id" << id << "}";
}
public: // Data Members
int A;
double X;
string id;
};
所以这是我坚持的部分:
MyData() : A(0), X(0), id() {}
explicit MyData(int) : A(97), X(CV_PI), id("mydata1234") // explicit to
我尝试过的声明(标题文件):
class MyData
{
public: // Data Members
int A;
double X;
std::string id;
MyData() ;
explicit MyData(int);
void write(cv::FileStorage& fs) const;
void read(const cv::FileNode& node);
};
#endif
.cpp中的东西
MyData::MyData() : A(0), X(0), id() {} // this is simple
但接下来呢?
MyData::MyData(int) :
A(97), X(CV_PI), id("mydata1234") {};
MyData::write(cv::FileStorage& fs) const
{ // ... it will stuck here C4430
}
使用Visual Studio 2010
答案 0 :(得分:1)
MyData::write(cv::FileStorage& fs) const
{ // ... it will stuck here C4430
}
C4430
是“缺少类型说明符”。这是因为MyData::write()
实现不包含返回类型。只有构造函数应该省略返回类型。将其更改为void MyData::write(cv::FileStorage& fs) const
以匹配其声明。
答案 1 :(得分:1)
要在类定义之外为write
方法添加正文,格式为:
return-type classname::methodname(parameters)
{
}
所以在这种情况下:
void MyData::write(cv::FileStorage& fs) const
{
}
答案 2 :(得分:1)
在你的hpp中,当你宣布它应该是这样的时候:
class Name{
.....some other functions ....
void write(cv::FileStorage& fs);
};
在您的cpp中,首先需要包含您的hpp然后:
void Name::write(cv::FileStorage& fs)
{
.......body...
}
首先说明功能的类型(在本例中为void
),然后是class
的名称,然后是::
,然后是功能名称。
希望这有助于:)