2014-02-21 2 views
1

я получаю следующее сообщение об ошибке:Неопределенное Referece в конструктор класса

> /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? Я довольно новыми для написания пользовательских Makefiles ...

каст:

#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) 
{ } 

ч:

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

главная:

#include "tcpcon.h" 

int main() 
{ 
    TCPConnection *TCPCon = new TCPConnection("localhost", "7777"); 
    cout << "Hi\n"; 
    return 0; 
} 

Makefile:

CC=g++ 
CCOPTS=-Wall -Wextra -g 

OBJS = tcpcon.o 
TARGETS = manager 

.PHONY: all clean 

$(TARGET) : $(OBJS) 
    $(CC) -o [email protected] $^ $(CFLAGS) $(LIBS) 

all: $(OBJS) $(TARGETS) 

clean: 
    rm -f $(TARGETS) $(OBJS) 

%: %.cpp 
    $(CC) $(CCOPTS) -o [email protected] $< 
+1

Это makefile. 'g ++ -Wall -Wextra -g -o manager tcpcon.cpp manager.cpp' должен корректно строить. – timrau

+0

Хм, мой: 'g ++ -Wall -Wextra -g -o manager manager.cpp' – MrDuk

+1

Ну, вы должны включить' tcpcon.o' в последнюю команду. 'g ++ -Wall -Wextra -g -o manager tcpcon.o manager.cpp' – timrau

ответ

1

Оказывается, что проблема может быть связана с несколькими вещами:

  • Использование $ (TARGET) вместо $ (ЦЕЛЕЙ) в одном месте
  • не включают главный файл (manager.cpp) в список Objs

Мой обновленный makefile находится ниже:

CC=g++ 
CCOPTS=-Wall -Wextra -g 

OBJS = manager.o tcpcon.o 
TARGETS = manager 

.PHONY: all clean 

$(TARGETS) : $(OBJS) 
    $(CC) -o [email protected] $^ $(CFLAGS) $(LIBS) 

all: $(TARGETS) $(OBJS) 

clean: 
    rm -f $(TARGETS) $(OBJS) 

%: %.cpp 
    $(CC) $(CCOPTS) -o [email protected] $< 
Смежные вопросы