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
相关文章:
  • 没有找到相关文章