我有我想要調試的代碼。我看起來沒問題。但是,我得到一個錯誤,我不understand.Here的我的代碼C++ - 這個單獨的編譯代碼有什麼問題?
//struct.h
#ifndef STRUCT_H
#define STRUCT_H
#include <iostream>
using namespace std;
struct Person {
Person();
Person(int a, string n);
Person(const Person &p);
Person &operator=(const Person &p);
~Person();
int age;
string name;
};
#endif
//struct.cc
#include "struct.h"
Person::Person(): age(0), name("noname") {
cout << "Creating default Person" << endl;
}
Person::Person(int a, string n): age(a), name(n) {
cout << "Creating: " << name << "," << age << endl;
}
Person::Person(const Person &p) {
name = p.name;
age = p.age;
}
Person& Person::operator=(const Person &p) {
Person person;
person.name = p.name;
return person;
}
Person::~Person() {
cout << "Destroying: " << name << "," << age << endl;
}
//structMain.cc
#include "struct.h"
#include <iostream>
using namespace std;
int main() {
Person one(21, "Zuhaib");
cout << "I am " << one.name << ". I am " << one.age << " years old" << endl;
Person two;
cout << "I am " << two.name << ". I am " << two.age << " years old" << endl;
two = one;
cout << "I am " << two.name << ". I am " << two.age << " years old" << endl;
}
我
g++ -c struct.cc
g++ -c structMain.cc
g++ -o struct.o structMain.o
編譯然後我收到以下錯誤
structMain.o: In function `main':
structMain.cc:(.text+0x3b): undefined reference to `Person::Person(int, std::basic_string<char, std::char_traits<char>, std::allocator<char> >)'
structMain.cc:(.text+0xb5): undefined reference to `Person::Person()'
structMain.cc:(.text+0x11e): undefined reference to `Person::operator=(Person const&)'
structMain.cc:(.text+0x180): undefined reference to `Person::~Person()'
structMain.cc:(.text+0x18c): undefined reference to `Person::~Person()'
structMain.cc:(.text+0x1b8): undefined reference to `Person::~Person()'
structMain.cc:(.text+0x1e3): undefined reference to `Person::~Person()'
structMain.cc:(.text+0x1f4): undefined reference to `Person::~Person()'
collect2: ld returned 1 exit status
我想我包括所有的正確的文件。我仔細檢查了聲明和定義。我只是不確定爲什麼這些錯誤即將到來。我看起來很好。
此外,在主函數中,什麼在該行
two = one;
我不知道這一點,因爲,我已經超負荷運營情況=,但我也定義拷貝構造函數也執行時「 =「。所以在上面的例子中,operator = execute或copy構造函數。 任何幫助,將不勝感激。 感謝
請重新考慮您對不良做法['using namespace std;'](http://stackoverflow.com/q/1452721/1171191)和['endl'](http://chris-sharpe.blogspot。 co.uk/2016/02/why-you-shouldnt-use-stdendl.html)。 – BoBTFish
最後一行分隔編輯接縫奇怪。嘗試不用'-c'選項 – Garf365
@ Garf365。我很抱歉,那應該是一個-o。我已經改變了它 –