cpp错误重复符号使用命名空间
cpp Error Duplicate symbol using namespace
这会让我抓狂!
首先,我已经尝试过此线程的解决方案 (C++) Linking with namespaces causes duplicate symbol error 但没有成功(也许我做错了)
这是我试图做的事情:
// ofApp.hpp
#ifndef __ofApp_hpp
#define __ofApp_hpp
namespace vec_color {
glm::vec4 blue = glm::vec4( 0.f, 0.f, 255.f, 255.f );
glm::vec4 blueViolet = glm::vec4( 0.f, 0.f, 255.f, 255.f );
glm::vec4 darkRed = glm::vec4( 200.f, 0.f, 0.f, 255.f );
glm::vec4 green = glm::vec4( 0.f, 255.f, 0.f, 255.f );
glm::vec4 grey = glm::vec4( 128.f, 128.f, 128.f, 255.f );
glm::vec4 lightGoldenRodYellow = glm::vec4( 250.f, 250.f, 210.f, 255.f );
glm::vec4 pink = glm::vec4( 255.f, 192.f, 203.f, 255.f );
glm::vec4 red = glm::vec4( 255.f, 0.f, 0.f, 255.f );
glm::vec4 yellow = glm::vec4( 255.f, 255.f, 0.f, 255.f );
glm::vec4 white = glm::vec4( 255.f, 255.f, 255.f, 255.f );
};
...
#endif
然后我得到
duplicate symbol 'vec_color::grey' in:
/Users/[...]/Build/Intermediates.
所以我尝试了
// ofApp.hpp
#ifndef __ofApp_hpp
#define __ofApp_hpp
namespace vec_color {
extern glm::vec4 blue;
extern glm::vec4 blueViolet;
extern glm::vec4 darkRed;
extern glm::vec4 green;
extern glm::vec4 grey;
extern glm::vec4 lightGoldenRodYellow;
extern glm::vec4 pink;
extern glm::vec4 red;
extern glm::vec4 yellow;
extern glm::vec4 white;
};
...
// ofApp.cpp
vec_color::blue = glm::vec4( 0.f, 0.f, 255.f, 255.f );
vec_color::blueViolet = glm::vec4( 138.f, 43.f, 226.f, 255.f );
vec_color::darkRed = glm::vec4( 200.f, 0.f, 0.f, 255.f );
vec_color::green = glm::vec4( 0.f, 255.f, 0.f, 255.f );
vec_color::grey = glm::vec4( 128.f, 128.f, 128.f, 255.f );
vec_color::lightGoldenRodYellow = glm::vec4( 250.f, 250.f, 210.f, 255.f );
vec_color::pink = glm::vec4( 255.f, 192.f, 203.f, 255.f );
vec_color::red = glm::vec4( 255.f, 0.f, 0.f, 255.f );
vec_color::yellow = glm::vec4( 255.f, 255.f, 0.f, 255.f );
vec_color::white = glm::vec4( 255.f, 255.f, 255.f, 255.f );
...
C++ requires a type specifier for all declarations
在 cpp 文件中的每一行变量声明。
我被卡住了,如果有人有提示请告诉我。
弗兰克。
这种方式应该可行:
ofApp.hpp
#ifndef __ofApp_hpp
#define __ofApp_hpp
namespace vec_color {
extern glm::vec4 blue;
extern glm::vec4 blueViolet;
extern glm::vec4 darkRed;
extern glm::vec4 green;
extern glm::vec4 grey;
extern glm::vec4 lightGoldenRodYellow;
extern glm::vec4 pink;
extern glm::vec4 red;
extern glm::vec4 yellow;
extern glm::vec4 white;
};
...
#endif
ofApp.cpp
#include "ofApp.hpp"
namespace vec_color {
glm::vec4 blue = glm::vec4( 0.f, 0.f, 255.f, 255.f );
glm::vec4 blueViolet = glm::vec4( 0.f, 0.f, 255.f, 255.f );
glm::vec4 darkRed = glm::vec4( 200.f, 0.f, 0.f, 255.f );
glm::vec4 green = glm::vec4( 0.f, 255.f, 0.f, 255.f );
glm::vec4 grey = glm::vec4( 128.f, 128.f, 128.f, 255.f );
glm::vec4 lightGoldenRodYellow = glm::vec4( 250.f, 250.f, 210.f, 255.f );
glm::vec4 pink = glm::vec4( 255.f, 192.f, 203.f, 255.f );
glm::vec4 red = glm::vec4( 255.f, 0.f, 0.f, 255.f );
glm::vec4 yellow = glm::vec4( 255.f, 255.f, 0.f, 255.f );
glm::vec4 white = glm::vec4( 255.f, 255.f, 255.f, 255.f );
};
或者这样:
ofApp.cpp
glm::vec4 vec_color::blue = glm::vec4( 0.f, 0.f, 255.f, 255.f );
...
无论如何,你以全局变量结束。不推荐这样做。
vec_color::blue = glm::vec4( 0.f, 0.f, 255.f, 255.f );
不起作用,因为您没有指定对象的类型。将其更改为
glm::vec4 vec_color::blue = glm::vec4( 0.f, 0.f, 255.f, 255.f );
也对其他变量进行类似的更改。
正如评论中指出的那样,使用下面的两个下划线
#ifndef __ofApp_hpp
#define __ofApp_hpp
不得在应用程序代码中使用。它们仅供编译器编写者使用。请不要使用它们。最好将它们一起删除并使用大多数主流编译器都支持的#pragma once
。
// ofApp.hpp
#pragma once
namespace vec_color {
extern glm::vec4 blue;
extern glm::vec4 blueViolet;
extern glm::vec4 darkRed;
extern glm::vec4 green;
extern glm::vec4 grey;
extern glm::vec4 lightGoldenRodYellow;
extern glm::vec4 pink;
extern glm::vec4 red;
extern glm::vec4 yellow;
extern glm::vec4 white;
};
这会让我抓狂!
首先,我已经尝试过此线程的解决方案 (C++) Linking with namespaces causes duplicate symbol error 但没有成功(也许我做错了)
这是我试图做的事情:
// ofApp.hpp
#ifndef __ofApp_hpp
#define __ofApp_hpp
namespace vec_color {
glm::vec4 blue = glm::vec4( 0.f, 0.f, 255.f, 255.f );
glm::vec4 blueViolet = glm::vec4( 0.f, 0.f, 255.f, 255.f );
glm::vec4 darkRed = glm::vec4( 200.f, 0.f, 0.f, 255.f );
glm::vec4 green = glm::vec4( 0.f, 255.f, 0.f, 255.f );
glm::vec4 grey = glm::vec4( 128.f, 128.f, 128.f, 255.f );
glm::vec4 lightGoldenRodYellow = glm::vec4( 250.f, 250.f, 210.f, 255.f );
glm::vec4 pink = glm::vec4( 255.f, 192.f, 203.f, 255.f );
glm::vec4 red = glm::vec4( 255.f, 0.f, 0.f, 255.f );
glm::vec4 yellow = glm::vec4( 255.f, 255.f, 0.f, 255.f );
glm::vec4 white = glm::vec4( 255.f, 255.f, 255.f, 255.f );
};
...
#endif
然后我得到
duplicate symbol 'vec_color::grey' in:
/Users/[...]/Build/Intermediates.
所以我尝试了
// ofApp.hpp
#ifndef __ofApp_hpp
#define __ofApp_hpp
namespace vec_color {
extern glm::vec4 blue;
extern glm::vec4 blueViolet;
extern glm::vec4 darkRed;
extern glm::vec4 green;
extern glm::vec4 grey;
extern glm::vec4 lightGoldenRodYellow;
extern glm::vec4 pink;
extern glm::vec4 red;
extern glm::vec4 yellow;
extern glm::vec4 white;
};
...
// ofApp.cpp
vec_color::blue = glm::vec4( 0.f, 0.f, 255.f, 255.f );
vec_color::blueViolet = glm::vec4( 138.f, 43.f, 226.f, 255.f );
vec_color::darkRed = glm::vec4( 200.f, 0.f, 0.f, 255.f );
vec_color::green = glm::vec4( 0.f, 255.f, 0.f, 255.f );
vec_color::grey = glm::vec4( 128.f, 128.f, 128.f, 255.f );
vec_color::lightGoldenRodYellow = glm::vec4( 250.f, 250.f, 210.f, 255.f );
vec_color::pink = glm::vec4( 255.f, 192.f, 203.f, 255.f );
vec_color::red = glm::vec4( 255.f, 0.f, 0.f, 255.f );
vec_color::yellow = glm::vec4( 255.f, 255.f, 0.f, 255.f );
vec_color::white = glm::vec4( 255.f, 255.f, 255.f, 255.f );
...
C++ requires a type specifier for all declarations
在 cpp 文件中的每一行变量声明。
我被卡住了,如果有人有提示请告诉我。
弗兰克。
这种方式应该可行:
ofApp.hpp
#ifndef __ofApp_hpp
#define __ofApp_hpp
namespace vec_color {
extern glm::vec4 blue;
extern glm::vec4 blueViolet;
extern glm::vec4 darkRed;
extern glm::vec4 green;
extern glm::vec4 grey;
extern glm::vec4 lightGoldenRodYellow;
extern glm::vec4 pink;
extern glm::vec4 red;
extern glm::vec4 yellow;
extern glm::vec4 white;
};
...
#endif
ofApp.cpp
#include "ofApp.hpp"
namespace vec_color {
glm::vec4 blue = glm::vec4( 0.f, 0.f, 255.f, 255.f );
glm::vec4 blueViolet = glm::vec4( 0.f, 0.f, 255.f, 255.f );
glm::vec4 darkRed = glm::vec4( 200.f, 0.f, 0.f, 255.f );
glm::vec4 green = glm::vec4( 0.f, 255.f, 0.f, 255.f );
glm::vec4 grey = glm::vec4( 128.f, 128.f, 128.f, 255.f );
glm::vec4 lightGoldenRodYellow = glm::vec4( 250.f, 250.f, 210.f, 255.f );
glm::vec4 pink = glm::vec4( 255.f, 192.f, 203.f, 255.f );
glm::vec4 red = glm::vec4( 255.f, 0.f, 0.f, 255.f );
glm::vec4 yellow = glm::vec4( 255.f, 255.f, 0.f, 255.f );
glm::vec4 white = glm::vec4( 255.f, 255.f, 255.f, 255.f );
};
或者这样: ofApp.cpp
glm::vec4 vec_color::blue = glm::vec4( 0.f, 0.f, 255.f, 255.f );
...
无论如何,你以全局变量结束。不推荐这样做。
vec_color::blue = glm::vec4( 0.f, 0.f, 255.f, 255.f );
不起作用,因为您没有指定对象的类型。将其更改为
glm::vec4 vec_color::blue = glm::vec4( 0.f, 0.f, 255.f, 255.f );
也对其他变量进行类似的更改。
正如评论中指出的那样,使用下面的两个下划线
#ifndef __ofApp_hpp
#define __ofApp_hpp
不得在应用程序代码中使用。它们仅供编译器编写者使用。请不要使用它们。最好将它们一起删除并使用大多数主流编译器都支持的#pragma once
。
// ofApp.hpp
#pragma once
namespace vec_color {
extern glm::vec4 blue;
extern glm::vec4 blueViolet;
extern glm::vec4 darkRed;
extern glm::vec4 green;
extern glm::vec4 grey;
extern glm::vec4 lightGoldenRodYellow;
extern glm::vec4 pink;
extern glm::vec4 red;
extern glm::vec4 yellow;
extern glm::vec4 white;
};