我有一个项目,需要扩展某些功能而不接触正在使用的项目。

问题的核心是这个(我把它弄糊涂了,但核心应该很清楚)。



//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/

10-11 18:17