我有一个项目,需要扩展某些功能而不接触正在使用的项目。
问题的核心是这个(我把它弄糊涂了,但核心应该很清楚)。
//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.h”中定义),而无需触摸“ Speaker.h”
如果我进行编译,则会出现以下错误:
错误22错误C2512:'LSS :: Speaker':没有适当的默认构造函数>可用的Layout.cpp 7 1 MyProj
我认为这已经结束了-我们将不胜感激,对于C ++来说我还很陌生
编辑:在重现问题时,我做了一个TYPO(LSS:而不是LSS::)。更新了编译器错误
最佳答案
仔细阅读留言
错误3错误C2146:语法错误:缺少';'标识符'temp'之前> Layout.h 102 1
然后将LSS:Speaker temp;
更改为LSS::Speaker temp;
编辑:
对于错误
错误22错误C2512:'LSS :: Speaker':没有适当的默认构造函数>可用的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/