我确信我误解了一些事情。
在类中实例化一个struct对象并将其作为构造函数中的值传递后,我得到一个错误?
错误:'测试'不是一种类型
#include <iostream>
using namespace std;
struct Test
{
int x = 11;
int y = 22;
};
class A
{
private:
int foo = 100;
public:
A(Test tmp){}
};
class B
{
private:
Test test;
A a(test); //error
public:
B(){}
};
int main()
{
B b;
return 0;
}
答案 0 :(得分:5)
如果要将String record = "";
record = textFieldcm.getText()+" "+textFieldkm.getText()+" "+textFieldmil.getText();
JTextArea.append(record+"\n");
声明为数据成员并对其进行初始化,则应使用正确的语法:
a
请注意,default member initializer仅支持大括号或等号,但不支持括号初始值设定项。只有在成员初始化列表中省略成员时才使用它。
编译器正在尝试将class B
{
private:
Test test;
A a{test}; // default member initializer
A a = test; // default member initializer
A a = A(test); // default member initializer
public:
B() : a(test) {} // member initializer list
};
解释为函数,该函数返回a
并将A
作为参数。 test
不是类型名称,然后编译失败。
答案 1 :(得分:1)
在[I]实例化类...
中的结构对象之后
class B
{
private:
Test test;
这不是实例化 任何。此声明每个(此时,类型为B
的理论对象将具有名为test
的成员变量,类型为Test
}。
(此外,养成在学习过程中尽早制作任何成员变量private
而不是public
的习惯。class
不仅仅是struct
1}}有了函数,它是一个基本的OOP构建块,应该不将其数据成员暴露给public
- 这样做通常是一个设计错误。)
A a(test); //error
这是不&#34;将[test
]作为参数传递给构造函数&#34;,正如您所说的那样!
这是一个名为B
的类a
的成员函数,它返回类型为A
的对象,并采用类型为test
的未命名参数... 。由于没有这样的类型,只是该名称的成员变量,这是一个错误。
由于您的代码示例的总体目的尚不清楚,因此很难说将会是什么&#34;正确&#34;对你而言。