【发布时间】:2016-06-21 05:40:27
【问题描述】:
我有这段代码正在尝试调试。在我看来没问题。但我收到一个我不明白的错误。这是我的代码
//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=,但我还定义了在遇到“=”时也会执行的复制构造函数。因此,在上述情况下,是 operator= 执行还是复制构造函数。 任何帮助,将不胜感激。 谢谢
【问题讨论】:
-
请重新考虑您使用的不良做法
using namespace std;和endl。 -
最后一行分开的编译接缝奇怪。尝试不使用
-c选项 -
试试
g++ -o out struct.o structMain.o -
@Q_A:尽快改掉这个习惯。
-
我投票结束这个问题,因为这是一个简单的错字,以不太可能帮助其他人的方式解决。
标签: c++ struct g++ operator-overloading copy-constructor