【问题标题】:Avoid re-definition in C++避免在 C++ 中重新定义
【发布时间】:2013-04-10 20:36:10
【问题描述】:

我想避免从两个不同的包含文件重新定义如下:

文件 ABC.h

extern int v=1;

文件 foo.h

#include "ABC.h"
class Foo
#ifdef BLA
: public ABC
#endif

{
    ...
};

文件bar.h

extern int v=3;

主要:

#define BLA
#include <foo.h>
#include <bar.h>

基本上foo是我写的一个类,bar是第三方库。但这似乎不起作用。我该如何解决这个问题?

对不起,这有点难以描述,这个例子有点糟糕,因为冲突的部分实际上不是变量,而是像#define这样的东西,并且被包裹在大块代码中(错误消息是:“多重定义` __vector_17'")。有没有办法解决它不使用命名空间

【问题讨论】:

  • 如果你想同时使用v?
  • ...或者给你自己的变量一个不同的名字?体现其不同的功能?
  • 将问题编辑得更准确一些...
  • ABC.h 和 bar.h 里面都有一些我宁愿避免的非常复杂的东西:(
  • 这个 SO 条目对您有用吗? stackoverflow.com/questions/6378817/…

标签: c++ arduino c-preprocessor


【解决方案1】:

使用命名空间可以解决这个问题:

namespace foo
{
    int val =1;
}

namespace bar
{
    int val =3;
}

using namespace foo;

int x = val; //Now x will be assigned with 1

【讨论】:

    【解决方案2】:

    你需要一个命名空间:

    namespace foo
    {
        int v =100;
    }
    
    namespace bar
    {
        int v =500;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-10-27
      • 1970-01-01
      • 2010-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-27
      相关资源
      最近更新 更多