决议:我是一个完整的doofus。在仔细阅读了所有文件并通过我们的专有依赖文件生成器追溯之后,事实证明确实存在最近被添加到文件系统中的流氓.cpp包含,这导致了问题。对不起,谢谢大家的帮助! XD
我遇到了一个令人沮丧的难题,我希望有人可以提供帮助。基本上,我在头文件中声明一个泛型类,如下所示:
//foo.h
#pragma once
class foo
{
public:
foo();
~foo();
void random_function();
};
请注意,我已经声明了一次pragma以防止多个定义,并且所有函数原型都放在类定义中。相应的类定义如下:
// foo.cpp
#include "foo.h"
foo::foo() {
}
foo::~foo(){
}
void foo::random_function(){
//do stuff
}
此类在许多其他文件中使用。例如:
// bar.h
#include “foo.h”
class bar
{
bar();
~bar();
std::shared_ptr<foo> get_foo();
std::shared_ptr<foo> my_foo;
};
但是当我编译时,我会为类定义的每个函数成员收到以下错误:
bar.o: In function `foo:foo()':
dir/foo.cpp:80: multiple definition of `foo::foo()'
blah.o:dir/foo.cpp:80: first defined here
bar.o: In function `foo:foo()':
dir/foo.cpp:80: multiple definition of `foo::foo()'
blah.o:dir/foo.cpp:80: first defined here
请注意它似乎连续两次重复相同的3行错误。对每个构造函数/析构函数/函数声明重复相同的错误模式。还要注意它是如何说foo.cpp中的函数foo()首先在foo.cpp中定义的,这似乎没有多大意义。但我只是注意到,它从bar.o开始然后说blah.o ......?
真的在这个问题上摸不着头脑,似乎无法破译问题的来源或我应该去哪里。任何帮助将不胜感激! :d
补遗:
答案 0 :(得分:1)
尝试添加foo.h
#ifndef FOO_H
#define FOO_H
//foo class and stuff
#endif