包括和转发声明C++
Includes & Forward Declaration in C++
我已经阅读了很多关于此的线程,并按照 http://www.eventhelix.com/RealtimeMantra/HeaderFileIncludePatterns.htm 的说明进行操作,但我仍然遇到包含问题。
为了确保我的真实代码中没有其他错误,我编写并尝试精确地编译以下代码。
啊:
#ifndef A_H
#define A_H
class A
{
public:
A(){};
void myMethod() const;
};
#endif
答.cpp:
#include "A.h"
#include <iostream>
void A::myMethod() const
{
std::cout << "Hooray!" << std::endl;
}
B.h:
class A;
#ifndef B_H
#define B_H
class B
{
const A* aInstance;
public:
B(){};
void useA() const;
};
#endif
乙.cpp:
#include "B.h"
void B::useA() const
{
aInstance.myMethod();
}
主.cpp:
#include "A.h"
#include "B.h"
int main()
{
B bInstance;
bInstance.useA();
return 0;
}
编译命令:g++ main.cpp A.cpp B.cpp
错误:
B.cpp: In member function ‘void B::useA() const’:
B.cpp:5:15: error: request for member ‘myMethod’ in ‘((const B*)this)->B::aInstance’, which is of non-class type ‘const A* const’
我真的开始感到沮丧了。如何让 B 类使用 A 类?在我上C++课上,我们没有看到指针和更大的项目,从我读到的内容来看,我真的觉得我明白这里应该发生什么,但我不知道为什么它不起作用。
感谢您的任何帮助。你会让我度过整个周末。
它是
:
aInstance->myMethod();
不
aInstance.myMethod();
因为aInstance
是指向A
的指针,而不是A
对象。
另外,在 B.cpp
中,您需要#include "A.h"
.
编辑:
代码会导致未定义的行为。 aInstance
未初始化,您在其中调用myMethod
。由于它不是一个virtual
的方法,并且您没有访问A
的任何成员,因此它可能会起作用,但无论如何,它是错误的。你应该在B
的构造函数中初始化它:
B() : aInstance(new A) {};
在B.cpp
中还包括A.h
:
#include "A.h" //include this as well
#include "B.h"
void B::useA() const
{
aInstance->myMethod(); //also use -> not .
}
包含A.h
,以便编译器可以知道aInstance
具有一个名为 myMethod
的成员函数。
首先,您需要实例化对象
const A* aInstance;
然后更改代码
void B::useA() const
{
aInstance->myMethod();
}
相关文章:
- .cpp和.h文件中的模板专用化声明
- 未在作用域中声明unordered_map
- C++避免重复声明的语法是什么
- 如何确保C++函数在定义之前声明(如override关键字)
- 错误:未在此范围内声明'reverse'
- 奇怪的(对我来说)返回声明 - 在谷歌上找不到任何关于它的信息
- 为什么在定义函数之前先声明它
- 如何声明特征矩阵,然后通过嵌套循环初始化它
- #ifdef和未声明的标识符
- 没有显式声明的int[]中的foreach
- 在基于范围的for循环中使用结构化绑定声明
- 在将变量声明为引用时,堆在释放后使用
- C++:无法访问声明的受保护成员
- 为什么我不能在一个类的不同行中声明和定义成员变量?
- 我不明白为什么我声明一个空的内部结构并将其传递给构造函数
- 使用cmake从源代码构建MySQL连接器/C++失败(与以前的声明冲突)
- 在函数内部的声明中初始化数组,并在外部使用它
- Visual Studio中的函数声明和函数定义问题
- c++类声明时,相同的例程,不同的成员变量类型
- 在 .h 文件中的类中声明静态变量和在.cpp文件中声明"global"变量有什么区别