2017-04-26 48 views
0

我正在編譯下面的代碼使用鏗鏘++和編譯器保持錯誤與鏈接類中的任何未定義的引用。我認爲編譯器不能獲取cpp文件中所有函數和構造函數的link.cpp定義,但我不知道它在某種程度上是否包含錯誤或makefile錯誤。此外,這個makefile輸出爲a.out,但我強調-o標誌應該使其輸出爲prog1。鏈接器錯誤,未定義的引用,生成文件的問題?

的main.cpp

#include <iostream> 
#include <link.h> 

int main (int argc, const char * argv[]) { 

int i = 10; 
while(i >= 0) { 

    i--; 
}  

Link test = new Link(); 

std::cout << "Hello, World!2\n"; 
return 42; 
} 

link.h

#ifndef LINK_H 
#define LINK_H 
#include <string> 
using namespace std; 

class Link { 
private: 
    string * value; 
    Link * next; 
public: 
    Link(Link * nextLink, string * stringValue); 
    ~Link(); 

} 
#endif 

link.cpp

#include <link.h> 

Link::Link(Link * nextLink, string * stringValue) { 

this.next = nextLink; 
this.value = stringValue; 
} 

Link::~Link() { 

delete value; 
} 

Link * Link::getNext() { 

return next; 
} 

string * Link::getString() { 

return value; 
} 

void Link::printAll() { 

if (next != NULL) { 
    cout << value << "\n" << next->printAll(); 
} else { 
    cout << value << "\n"; 
} 
} 

生成文件

main.o: main.cpp 
    clang++ -g -Wall -Wextra main.cpp 
link.o: link.cpp link.h 
    clang++ -g -Wall -Wextra link.cpp link.h 
all: main.o link.o 
    clang++ -g -Wall -Wextra main.o link.o -o prog1 

回答

0

使用-c標誌只編譯不鏈接。默認制定目標是第一個;你可能希望這是「全部」。另外,您不應該在命令行上傳遞頭文件。

all: main.o link.o 
    clang++ -g -Wall -Wextra main.o link.o -o prog1 
main.o: main.cpp link.h 
    clang++ -g -Wall -Wextra -c main.cpp 
link.o: link.cpp link.h 
    clang++ -g -Wall -Wextra -c link.cpp 
相關問題