我有一些代码在 Visual Studio 上运行良好,我现在正尝试在 g++ 上编译它。它在很多地方给了我“对 SomeClass::someMethod() const 的 undefined reference ”。
最常见的是以下几种情况:
for (const SomeListNode *node = owner->some_list; node != 0; node = node->getNext())
在这种情况下,我得到“对 SomeListNode::getNext() const 的 undefined reference ”。明确包含此类的头文件。为什么这在 g++ 中不合法?
编辑更多信息
我正在使用这样的 makefile 进行构建:
CC=g++
CFLAGS=-c -Wall -DDEBUG -g
LDFLAGS=
SOURCES=main.cpp SomeList.cpp SomeListNode.cpp Location.cpp OutputControl.cpp
OBJECTS=$(SOURCES:.cpp=.o)
EXECUTABLE=theprogram
all: $(SOURCES) $(EXECUTABLE)
$(EXECUTABLE): $(OBJECTS)
$(CC) $(LDFLAGS) $(OBJECTS) -o $@
.cpp.o: $(CC) $(CFLAGS) $< -o $@
最初列出的代码行位于 OutputControl.cpp
中。它采用指向 SomeListNode
的指针并对其进行迭代。 getNext
() 返回指向另一个 SomeListNode
的指针。
可能还需要注意的是,这只发生在静态函数中。
最佳答案
您只能在具有 const 限定的对象上调用具有 const 限定的方法。如果 getNext() 不是 const,那么您应该使用 SomeListNode *node
而不是 const SomeListNode *node
。
关于c++ - g++ 在 visual studio 满意的地方给出错误 - 未定义的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5191798/