gpt4 book ai didi

c++ - C++ 中的包含和转发声明

转载 作者:行者123 更新时间:2023-11-27 23:25:25 25 4
gpt4 key购买 nike

我已经阅读了很多关于此的主题,并按照 http://www.eventhelix.com/RealtimeMantra/HeaderFileIncludePatterns.htm 上的说明进行操作,但我仍然遇到包含问题。

为了确保我的真实代码中没有其他错误,我编写并尝试准确编译以下代码。

A.h:

#ifndef A_H
#define A_H
class A
{
public:
A(){};
void myMethod() const;
};
#endif

A.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

B.cpp:

#include "B.h"

void B::useA() const
{
aInstance.myMethod();
}

main.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++ 类(class)中,我们没有得到指导和更大的项目,从我读到的内容来看,我真的觉得好像我明白这里应该发生什么,但我不知道为什么它不起作用.

感谢您的帮助。你会让我度过整个周末。

最佳答案

它是:

aInstance->myMethod();

不是

aInstance.myMethod();

因为 aInstance 是指向 A 的指针,而不是 A 对象。

此外,在B.cpp中,您需要#include "A.h"

编辑:

您的代码会导致未定义的行为aInstance 未初始化,您正在其中调用 myMethod。由于它不是虚拟 方法并且您没有访问A 的任何成员,因此它可能会起作用,但无论如何,它是错误的。你应该在 B 的构造函数中初始化它:

B() : aInstance(new A) {};

关于c++ - C++ 中的包含和转发声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9837930/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com