从main引用的C ++未定义符号

时间:2015-04-27 04:39:03

标签: c++ dictionary compiler-errors linker-errors

在编译C ++项目时获取未定义的符号错误,但在调用LitTab类中定义的静态方法时会出现问题。这是以下代码:

#ifndef __dasm__LitTab__
#define __dasm__LitTab__

#include <map>

class LitTab {

private:
    static std::map<int, int> table;

public:
    static void add(int address, int value);
    static int get(int address);
    static bool contains(int address);

};

#endif

和实施:

#include "LitTab.hpp"

std::map<int, int> LitTab::table;

void LitTab::add(int address, int value) {
    table.insert(std::pair<int, int>(address, value));
}

bool LitTab::contains(int address) {
    return LitTab::table.find(address) != LitTab::table.end();
}

int LitTab::get(int address) {
    if(LitTab::contains(address)) return LitTab::table[address];

    return NULL;
}

这里是调用主函数:

#include "LitTab.hpp"

using namespace std;

map<int, int> LitTab::table; // is this necessary?

int main(int argc, const char * argv[]) {
    LitTab::add(1, 1); // fails here

    return 0;
}

以下是错误消息:

c++    -c -o regex.o regex.cpp
g++ -g -Wall -O0 -o dasm main.o optab.o LitTab.o File.o RecordTokenizer.o InstructionTokenizer.o regex.o
duplicate symbol __ZN6LitTab5tableE in:
    main.o
    LitTab.o
ld: 1 duplicate symbol for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [dasm] Error 1
老实说,我花了最后一个半小时在论坛,搜索引擎优化和其他网站上搜索,我试图寻找,我不知道还有什么可做的。我需要帮助。

编辑:添加Makefile

CC=g++
CFLAGS=-g -Wall -O0

all: dasm

dasm: main.o optab.o LitTab.o File.o RecordTokenizer.o InstructionTokenizer.o regex.o
    $(CC) $(CFLAGS) -o $@ $^

clean:
    rm *.o dasm

0 个答案:

没有答案