class 在另一个 class 中的构造函数问题

Constructor problems with class inside another class

我认为问题的标题可能不太正确,但是,我有一个 class(我们称它为 A),它有一个需要指向另一个 class(称为 B)的构造函数).这很好,但是当我在第三个 class(称为 C)中定义一个 class 时,在将变量放入构造函数后我得到这个错误:error: expected identifier before ‘&’ token,然后如果我删除& 我得到:error: ‘ClassA’ is not a type.

看不懂我刚才说的那些人(我不怪你),举个例子:

class A
{
    private:
        int number;
        //etc, etc...
};

class B
{
    private:
        A* ClassAPntr;

    public:
        B(A* objectPointer)
        {
            ClassAPntr = objectPointer;
        }
};

class C
{
    private:
        A ClassA;
        B ClassB(&ClassA);
};

int main()
{
    C classC;
}

您实际上并未为 class C 声明构造函数。你的意思是这样的:

class C
{
public:
    C()
    : b(&a)  // you have to provide the arguments to B's constructor here
    { }

private:
    A a;
    B b;    // ... not here
};

澄清一下,当您通过将 A classA private object 添加到 class C 来执行 composition 时,编译器会接受此步骤,因为 A 具有未定义的构造函数,这意味着编译器将为您创建一个默认构造函数并在 make A classA.

时调用它

class B 中的问题,因为它有一个非默认的用户定义的构造函数,这意味着编译器应该强制您在 class C 中通过构造函数初始化列表或通过 c 中的大括号调用它++11,所以它成为你的责任只是因为编译器不知道你要为 class B 传递哪个 class A Object 的地址 构造函数。

那么您为什么会收到此错误消息:class A is not a typeexpected identifier before ‘&’ token

答案是编译器认为 B ClassB(&ClassA)private 函数的声明,其名称为 ClassB 并且 return 值类型为 B class

并且因为您从未在 class 中使用此函数,所以编译器永远不会给您任何与定义相关的错误。并且您也永远不会在 main 等其他函数中使用此成员函数,因为它是私有的

要产生未定义的引用错误,您可以将 c class 修改为如下所示:

class C
{

private:
  A classA;
  B classB();
  friend B func() ;
};

B func() { 
  C c;
return c.classB(); // undefined reference Error
}