小编Sam*_*sle的帖子

返回对前向声明类型的引用(C++)

我有一个类方法返回对某事物的引用.当我使用这个方法时,如果我只有这个东西的前向声明,我只能编译,如果我分配方法的输出.我真的不明白为什么......

这是一个简化的例子:

ClassA.h:

//Forward declare
class ClassB;

class ClassA
{
public:
    ClassA(void);
    ~ClassA(void);

    ClassB& Func();
};
Run Code Online (Sandbox Code Playgroud)

ClassA.cpp:

#include "ClassA.h"

#include "ClassB.h"

ClassA::ClassA(void)
{}

ClassA::~ClassA(void)
{}

static ClassB c;

ClassB& ClassA::Func()
{
    return c;
}
Run Code Online (Sandbox Code Playgroud)

ClassB.h:

#pragma once
class ClassB
{
public:
    ClassB(void) {};
    ~ClassB(void) {};
};
Run Code Online (Sandbox Code Playgroud)

现在,如果我在ClassA::Func没有分配返回值的情况下调用(虽然只有前向声明ClassB),它将无法编译:

main.cpp中:

#include "ClassA.h"

int main(void)
{
    ClassA a;

    a.Func(); //error C2027: use of undefined type 'ClassB'

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

如果我改用这一行,它的工作原理是: ClassB& b = a.Func();

这里发生了什么事?ClassB当没有在任何地方分配返回值时,为什么编译器需要知道其方法的大小或方法?

我正在用VisualStudio 2010 …

c++ forward-declaration visual-studio

15
推荐指数
1
解决办法
414
查看次数

标签 统计

c++ ×1

forward-declaration ×1

visual-studio ×1