【问题标题】:How should I deal with class redefinition errors in c++?我应该如何处理 C++ 中的类重定义错误?
【发布时间】:2013-05-05 15:41:14
【问题描述】:

我目前正在处理一个 c++ 项目,但我似乎忘记了一些可以让我的代码正确编译的语法或方法。在尝试设置我的环境后,我遇到了重新定义错误,当然,这并不是我的本意。

编译时报错如下

src/foo.cpp:4:7: error: redefinition of ‘class foo’
In file included from src/foo.cpp:2:0:
./headers/foo.h:7:7: error: previous definition of ‘class foo’

我不相信我在我的空间中重新定义了 foo;我知道这是使用我定义的 foo.h 头文件的结果。

这是我正在编译的代码

// foo.h
#ifndef FOO_H
#define FOO_H

#include <iostream>

class foo {
public:
  foo();
  void test();
  ~foo();
};

#endif /* FOO_H */

// foo.cpp
#include <foo.h>

class foo {
public:
  foo(){}
  void test(){}
  ~foo(){}
};

foo::foo(){}

int foo::test(){
    std::cout << "Derp!";
    return 0;
}

foo::~foo(){}

我应该如何设置我的头文件或 cpp 文件来解决这个问题?

【问题讨论】:

  • 简单,从 foo.cpp 中删除类 foo。还将 更改为“foo.h”。虽然 的确切含义未指定,但它适用于 foo.h 显然不是的系统头文件。

标签: c++ header redefinition


【解决方案1】:

您已经在类中正确地对方法进行了原型设计,因此重新定义您的类以实现方法是错误的。删除重复的类,你需要做的就是在你的 foo.cpp 文件中定义它们:

foo::foo()       { .. }
foo::~foo()      { .. }
void foo::test() { .. }

【讨论】:

  • 我已经用上述建议更新了问题。在编译时它仍然会抛出重新定义错误。
  • @Cosban 删除类 foo 从 foo.cpp!离开方法,删除类声明。
  • 啊,误解了建议,这已经修复了错误。谢谢!
猜你喜欢
  • 1970-01-01
  • 2020-05-14
  • 2020-10-20
  • 1970-01-01
  • 1970-01-01
  • 2010-11-03
  • 2023-03-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多