gpt4 book ai didi

c++ - 分离到.h/.cpp后重定义Class

转载 作者:行者123 更新时间:2023-11-28 03:15:00 30 4
gpt4 key购买 nike

我知道这是一个关于 C++ 的常见问题,但根据其他答案等的建议,我仍然无法让看似简单的代码工作。我的问题是以下代码给出了“错误:重新定义‘class Communicator’”:

全局.h

#ifndef GLOBAL_H 
#define GLOBAL_H

class object_payload;
class pending_frame;

class Communicator {
private:
map<string,object_payload*> local_objects;
map<string,pending_frame*> remote_tasks;
bool listening;

public:
Communicator();
void stop_listening();
void add_to_remote_tasks(string name, pending_frame* pfr);
void listen();
void distributed_release(string task_name);

};

extern Communicator communicator;

#endif

全局.cpp

#include "global.h"

class Communicator {

private:
map<string,object_payload*> local_objects;
map<string,pending_frame*> remote_tasks;

bool listening;

public:

Communicator(){
// implementation
}

void stop_listening(){
// implementation
}

void add_to_remote_tasks(string name, pending_frame* pfr){
// implementation
}

void listen(){
// implementation
}

void distributed_release(string task_name){
// implementation
}
};

Communicator communicator;

有谁知道为什么会出现这个错误? .cpp 包含 header 。我还有其他也包含 header 的 .cpp 文件,但有了守卫,我不明白为什么这会很重要。

感谢您对此提供的任何帮助,非常感谢。

编辑:此外,我的 runner.cpp 文件(带有 main)包含 global.h 以便访问通信器全局对象。

最佳答案

一个类必须只有一个定义。目前,您可以从 #include 获得一个,在文件中获得另一个。

你不应该重复类本身,只需在类外实现功能,比如

Communicator::Communicator(){
// implementation
}

关于c++ - 分离到.h/.cpp后重定义Class,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17194861/

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