C++的奇怪行为
C++ strange behaviour
本文关键字:C++ 更新时间:2023-10-16
至少可以说,我对C++非常陌生。然而,我在任何地方都找不到这个具体问题的答案。
这也不是特定于代码的,因为我尝试下载了很多代码,并通过g++或make进行编译。
似乎每当我在main()
中包含类标头时,它都会抛出链接器错误:
Undefined symbols for architecture x86_64:
"House::getNumBath()", referenced from:
printHouse(House) in houses-91268b.o
"House::getSqft()", referenced from:
printHouse(House) in houses-91268b.o
"House::getColor()", referenced from:
printHouse(House) in houses-91268b.o
"House::House(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, int, int, double)", referenced from:
_main in houses-91268b.o
"House::House()", referenced from:
_main in houses-91268b.o
"House::~House()", referenced from:
_main in houses-91268b.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
无论我下载或生成什么代码,它都会发生,并且似乎与实现为MyClass::MyClass(/*args*/)的构造函数有关;
有人建议我应该在main
中包含.cpp
文件,而不是.h
文件,是的,它有效。但这是非常错误的,因为我一直被教导接口是为它而设的。否则它们的目的是什么?
根据另一个人的建议(谷歌搜索),我现在正在下载价值10GB的Xcode,希望它能有所帮助。看起来还是行不通。这里的C++出了什么问题?我是不是因为某种原因错过了C++11(再说一遍,为什么在相对较新的操作系统上?)?
更新:
我从另一个教程中获得了代码,它给了我同样的东西:
dog.cc
#include "Dog.h"
Dog::Dog() {
}
dog.h
#ifndef DOG_H
#define DOG_H
class Dog {
public:
Dog();
protected:
private:
};
#endif
main.cc
#include "Dog.h"
int main() {
Dog barky;
return 0;
}
在我做了之后扔了两个相同的东西(它们在同一个文件夹中,那些):
g++ main.cc
或
make ./main
这可能是我想尝试的最简单的例子,因为我以前在C中从未遇到过这样的问题,无论是使用Makefile
还是仅使用cc
文件。
您需要首先编译对象(dog.o)文件:
g++ -c dog.cc
然后用它编译main:
g++ main.cc dog.o
相关文章:
- 没有找到相关文章