c++ - 无法使用在不同头文件中定义的结构

标签 c++ struct header

我有一个项目,我需要在不影响我正在使用的项目的情况下扩展一些功能。

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


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

相关文章:

c++ - 使用 CUDA 进行暴力攻击。关于内存分配

f# - 访问外部程序集中结构的公共(public)只读成员

php - 使用 PHP 设置过期 header

c++ - 使用 cin.get() 获取一行文本,然后在循环中使用它来显示该行?

c++ - C++中的扫描线填充OpenGL/GLUT算法

c - C 语言上的二叉树实现

header - Fastify & NestJS - 如何在拦截器中设置响应头

csv - Hive,如何在输出查询时获取列名(而不是 table_name.column_name)

c++ - 多项式类 : Polynomial Multiplication

ios - 清除结构/类中的静态变量