为什么结构对象不是一个类型?

时间:2018-04-13 14:25:34

标签: c++ struct

我确信我误解了一些事情。

在类中实例化一个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;
}

2 个答案:

答案 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;对你而言。