我有一个项目,我需要在不影响我正在使用的项目的情况下扩展一些功能。
问题的核心是这个(我把它搞糊涂了,但核心应该很清楚)。
//Layout.h
#ifndef LAYOUT_H
#define LAYOUT_H
#include "Speaker.h"
class Layout
{
public:
//unrelated stuff
private:
LSS::Speaker temp;
};
#endif
//Speaker.h"
#ifndef SPEAKER_H
#define SPEAKER_H
namespace LSS
{
struct Speaker
{
Speaker(int val1, float val2)
:some_int(val1)
, some_float(val2)
{
}
~Speaker()
{
//do other stuff
}
int some_int;
float some_float;
};//struct Speaker
}
#endif
我只想能够在“Layout.h”中使用结构 Speaker(如“Speaker.h”中定义的)而不触及“Speaker.h”
如果我编译我得到以下错误:
Error 22 error C2512: 'LSS::Speaker' : no appropriate default constructor > available Layout.cpp 7 1 MyProj
我想这就结束了——任何帮助都将不胜感激,我是 c++ 的新手
编辑:在重新创建问题时我打了一个错字(LSS:而不是 LSS::)。更新了编译错误
最佳答案
仔细阅读留言
Error 3 error C2146: syntax error : missing ';' before identifier 'temp' > Layout.h 102 1
然后将 LSS:Speaker temp;
更改为 LSS::Speaker temp;
编辑:
对于错误
Error 22 error C2512: 'LSS::Speaker' : no appropriate default constructor > available Layout.cpp 7 1 MyProj
如果您为 Speaker 提供至少一个带参数的构造函数,您还必须提供默认构造函数(无参数的构造函数)以使 LSS::Speaker temp;
有效。这是一条规则(对于程序员没有编写构造函数的情况,编译器会使用默认构造函数,但如果程序员开始更改构造逻辑,编译器将不执行这部分工作)。
或者您可以在现有构造函数中提供默认值,如下所示:
Speaker(int val1 = 0, float val2 = 0.0f)
:some_int(val1)
,some_float(val2)
{
}
关于c++ - 无法使用在不同头文件中定义的结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28342665/