gpt4 book ai didi

c++ - "invalid use of incomplete type"。解决循环依赖

转载 作者:行者123 更新时间:2023-11-30 05:10:04 35 4
gpt4 key购买 nike

我是 C++ 的新手,我一直在尝试其他问题的不同建议,但我无法使我的代码正常工作。

我有一个类“PChar”和另一个类“Action”。一个 Action 有两个 PChar 成员,PChar 的一个方法(“act()”)必须能够创建一个 Action 对象。所以在尝试了不同的东西之后,我得到了这段代码:

“ Action .h”:

#ifndef ACTION_H
#define ACTION_H

class PChar;

class Action
{
PChar *subject, *object;
public:
Action();
Action(PChar& p1, PChar& p2);
};


#endif

“action.cpp”:

#include "action.h"

Action::Action(){};

Action::Action(PChar& p1,PChar& p2)
{
*subject=p1;
*object=p2;
};

“字符.h”

#ifndef CHARACTER_H
#define CHARACTER_H

#include <string>

#include "action.h"

class PChar
{
public:
std::string name;

PChar();

PChar(std::string input_name);

void act(PChar& target, Action &action);
};
#endif

“字符.cpp”

#include "character.h"

PChar::PChar(){}

PChar::PChar(std::string input_name)
{
name=input_name;
}

void PChar::act(PChar& target, Action& action)
{
action=Action(*this, target);
}

“ main.cpp ”

#include "action.h"
#include "character.h"

int main()
{
PChar char1("Joe");
PChar char2("Matt");
Action handshake;
char1.act(char2, handshake);
}

目标是创建一个对象“handshake”,其中包含两个字符作为成员。编译时出现错误:

action.cpp:7:10: error: invalid use of incomplete type ‘class PChar’
*subject=p1;
^
In file included from action.cpp:1:0:
action.h:4:7: note: forward declaration of ‘class PChar’
class PChar;
^
action.cpp:8:9: error: invalid use of incomplete type ‘class PChar’
*object=p2;
^
In file included from action.cpp:1:0:
action.h:4:7: note: forward declaration of ‘class PChar’
class PChar;
^

这是一个更大项目的一部分,这就是文件结构如此的原因,我只是简化了代码以重现错误。我尝试过其他类似问题的解决方案,但它们似乎不起作用。欢迎任何帮助或提示。谢谢!

最佳答案

C++ 需要知道类型的详细信息才能进行编译和赋值操作。

一个解决方案是在 “Action.cpp” 中也包含 “Character.h”

关于c++ - "invalid use of incomplete type"。解决循环依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45847732/

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