我有具有lib.h和lib.cpp的liblib.a:
#ifndef LIB_H
#define LIB_H
namespace N1 {
namespace N2 {
class C1 {
C1();
public:
enum DAY { MONDAY, TUESDAY, END };
struct DAY_PAIR {
const int index;
const int garbage;
DAY_PAIR(int i, int g) : index(i), garbage(g) {};
};
static const DAY_PAIR MONDAY_PAIR;
static const DAY_PAIR* PAIRS[END];
static void init();
};
}
}
#endif
#include <iostream>
#include "lib.h"
namespace N1 {
namespace N2 {
const C1::DAY_PAIR C1::MONDAY_PAIR(MONDAY, 1234);
const C1::DAY_PAIR* PAIRS[] = {&C1::MONDAY_PAIR};
void C1::init() {
std::cout << __PRETTY_FUNCTION__ << std::endl;
}
}
}
我尝试将我的虚拟程序链接到liblib.a:
#include <iostream>
#include "lib.h"
int main() {
N1::N2::C1::init();
std::cout << N1::N2::C1::PAIRS[N1::N2::C1::MONDAY]->index << std::endl;
return 0;
}
g++给了我:
/tmp/ccKKqDsT.o: In function `main':
/home/h/test/cpp/nested.cpp:7: undefined reference to `N1::N2::C1::PAIRS'
collect2: ld returned 1 exit status
如果我不创建liblib.a,然后尝试将所有.cpp文件编译成可执行文件。它编译良好。
我想念什么吗?
提前致谢。
最佳答案
lib.cpp中的PAIRS之前缺少类名,因此:
const C1::DAY_PAIR* C1::PAIRS[] = {&C1::MONDAY_PAIR};
关于c++ - 对静态库中的类变量的 undefined reference ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25338328/