未定义的引用到类构造函数

Undefined referece to class constructor

本文关键字:构造函数 引用 未定义      更新时间:2023-10-16

我收到以下错误:

> /tmp/ccYbdvB8.o: In function `main':
> /home/caleb/Documents/dev/cs438/tote2/mp2/manager.cpp:5: undefined
> reference to `TCPConnection::TCPConnection(char const*, char const*)'
> collect2: error: ld returned 1 exit status make: *** [manager] Error 1

我已经将标头包含在我尝试初始化的类中......所以我想也许这是我的makefile?我对编写自定义生成文件很陌生...

.cpp:

#include "tcpcon.h"
const string TCPConnection::Client = "client";
const string TCPConnection::Server = "server";
TCPConnection::TCPConnection(const char* t, const char* p) : target(t), port(p)
{ }

h:

class TCPConnection{    
    public:    
        TCPConnection(const char *target, const char *port);

主要:

#include "tcpcon.h"
int main()
{
    TCPConnection *TCPCon = new TCPConnection("localhost", "7777");
    cout << "Hin";
    return 0;
}

制作文件:

CC=g++
CCOPTS=-Wall -Wextra -g
OBJS = tcpcon.o
TARGETS = manager
.PHONY: all clean
$(TARGET) : $(OBJS)
    $(CC) -o $@ $^ $(CFLAGS) $(LIBS)
all: $(OBJS) $(TARGETS)
clean:
    rm -f $(TARGETS) $(OBJS)
%: %.cpp
    $(CC) $(CCOPTS) -o $@ $<

事实证明,该问题可能与以下几件事有关:

    在一个地方使用 $(TARGET)
  • 而不是 $(TARGET)
  • 未将主文件(管理器.cpp)包含在 OBJS 列表中

我更新makefile如下:

CC=g++
CCOPTS=-Wall -Wextra -g
OBJS = manager.o tcpcon.o
TARGETS = manager
.PHONY: all clean
$(TARGETS) : $(OBJS)
    $(CC) -o $@ $^ $(CFLAGS) $(LIBS)
all: $(TARGETS) $(OBJS)
clean:
    rm -f $(TARGETS) $(OBJS)
%: %.cpp
    $(CC) $(CCOPTS) -o $@ $<