gpt4 book ai didi

C++ 使用结构作为类的参数

转载 作者:搜寻专家 更新时间:2023-10-31 00:30:11 25 4
gpt4 key购买 nike

我只是不知道如何让它工作,还有另一个很好的问题“在 C++ 中将结构作为构造函数参数传递”,虽然我解决了所有问题,但我只是不明白为什么我的代码不起作用。我有三个文件:一个源文件

// A.cpp

#include "myClass.h"

int main()
{
struct myStruct {
double a;
double b;
};

myStruct structName;
structName.a = 1.1;
structName.b = 2.2;

myClass myClassObject(60.0, structName);

return 0;
}

类头文件

// myClass.h

class myClass {
private:
double m_value;
double m_a;
double m_b;

public:
myClass(double value, struct myStruct);
~myClass();
};

和另一个带有类定义的源文件

// myClass.cpp

#include "myClass.h"

myClass::myClass(double S, const myStruct &s): m_value(S), m_a(s.a), m_b(s.b) {};
myClass::~myClass(){};

我得到了各种各样的错误,比如在 myClass 源文件中我得到错误:没有重载函数“myClass::myClass”的实例匹配指定的类型。

现在如果我删除

struct myStruct
{
double a;
double b;
};

从 A cpp 源文件并将其放入 myClass 头文件中,所有错误都消失了。

Q) struct 声明是否应该进入 myClass 头文件,并且是我定义这个结构的唯一地方?这是正确的编码方式吗?

最佳答案

您有 2 个解决方案:

  1. 将 myStruct 放入 myClass.h
  2. 在 myClass.h 中转发声明 myStruct

基本上,您需要确保当有人阅读(包括)myClass.h 时,他们也知道 myStruct 存在,并且每个需要 myStruct 的人都可以通过某种方式访问​​它。

您不能转发声明 myStruct 然后在需要它的地方定义它,因为这打破了单一定义规则,但您可以将它放在 myClass header 或专用 header 中。

关于C++ 使用结构作为类的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37918639/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com