我正在使用clang ++编译以下代码,并且编译器会在对Link类中的任何内容进行未定义的引用时出错。我假设编译器不能获取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 :(得分:0)
我认为这是因为包含声明,将#include <link.h>
更改为#include "link.h"
。
此外,您还有其他一些错误,例如,在Link类定义后忘记了分号。
参考:What is the difference between #include < filename> and #include “filename”?
答案 1 :(得分:0)
使用-c
标志只进行编译而不进行链接。默认的make目标是第一个;你可能希望这是&#34;所有&#34;。此外,您不应该在命令行上传递头文件。
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