G ++对class :: function的未定义引用

我终于相当绝望了。 所以,在我的c ++中,我们被指示使用类。 我们有头文件声明类和函数,而单独的.cpp文件实现它。 事情应该是工作,但他们不是,networking上的解决scheme似乎没有为我工作。 我正在linux上使用G ++编译器,而且它似乎不能在IDE或常规命令行上工作。

我在TBook.h中得到的错误是这样的:

/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/crt1.o: In function `_start': (.text+0x20): undefined reference to `main' /tmp/ccxqI6An.o: In function `TBook::TBook()': TBook.cpp:(.text+0x3b): undefined reference to `Telephone::Telephone()' TBook.cpp:(.text+0x100): undefined reference to `Telephone::Telephone()' TBook.cpp:(.text+0x132): undefined reference to `Telephone::allNum(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)' TBook.cpp:(.text+0x182): undefined reference to `Telephone::~Telephone()' TBook.cpp:(.text+0x191): undefined reference to `Telephone::~Telephone()' TBook.cpp:(.text+0x2b3): undefined reference to `Telephone::~Telephone()' TBook.cpp:(.text+0x2e6): undefined reference to `Telephone::~Telephone()' TBook.cpp:(.text+0x2fa): undefined reference to `Telephone::~Telephone()' /tmp/ccxqI6An.o:TBook.cpp:(.text+0x370): more undefined references to `Telephone::~Telephone()' follow /tmp/ccxqI6An.o: In function `TBook::write()': TBook.cpp:(.text+0x4e1): undefined reference to `Telephone::getNumber()' TBook.cpp:(.text+0x506): undefined reference to `Telephone::getAreaCode()' TBook.cpp:(.text+0x53a): undefined reference to `Telephone::getName()' /tmp/ccxqI6An.o: In function `TBook::lookup(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)': TBook.cpp:(.text+0x6d4): undefined reference to `Telephone::getName()' TBook.cpp:(.text+0x79e): undefined reference to `Telephone::Telephone(int, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >)' /tmp/ccxqI6An.o: In function `TBook::print()': TBook.cpp:(.text+0x880): undefined reference to `Telephone::getName()' TBook.cpp:(.text+0x8e0): undefined reference to `Telephone::getNumber()' TBook.cpp:(.text+0x8ff): undefined reference to `Telephone::getAreaCode()' collect2: ld returned 1 exit status [Finished in 0.3s with exit code 1] 

我不喜欢该文件没有收到任何电话类的方法。 以下是TBook.cpp的代码:

 #ifndef TBOOK_H #define TBOOK_H #include "Telephone.h" class TBook{ private: Telephone rolodex[10]; int current; int max; public: TBook(); ~TBook(); void add(Telephone); void write(); bool is_full(); void print(); void check(); Telephone lookup(string); }; #endif 

这就是TBook.cpp的样子:

 #include <iostream> #include <fstream> #include <string> #include "TBook.h" #include "Telephone.h" using namespace std; TBook::TBook(){ current = 0; max = 9; cout << "Hello" << endl; string line; ifstream myfile ("rolodex.txt"); if (myfile.is_open()){ while ( getline (myfile,line) ){ cout << line << endl; Telephone t; t.allNum(line); add(t); } myfile.close(); }else if (!myfile.is_open()){ ofstream myfile; myfile.open ("rolodex.txt"); myfile << "This is an empty file (Relatively)."; myfile.close(); } } TBook::~TBook(){ } void TBook::add(Telephone tel){ if (!is_full()){ rolodex[current] = tel; current++; } } void TBook::write(){ ofstream myfile; myfile.open ("rolodex.txt"); for (int i = 0; i < current; ++i) { myfile << rolodex[i].getName() << "," << rolodex[i].getAreaCode() << "," << rolodex[i].getNumber() << "\n"; } myfile.close(); } bool TBook::is_full(){ if (current <= max){ return false; } return true; } Telephone TBook::lookup(string lookName){ for (int i = 0; i < current; ++i){ if (rolodex[i].getName() == lookName){ return rolodex[i]; } } return Telephone(100, "", "1000000"); } void TBook::print(){ //Print the vairables for (int i = 0; i < current; ++i){ cout << "Name: " << rolodex[i].getName() << endl; cout << "Number: (" << rolodex[i].getAreaCode() << ") " << rolodex[i].getNumber() << endl; } } void TBook::check(){ cout << "the message" << endl; } 

由于这个问题似乎与电话课有关,所以我想我也应该显示这个代码

Telephone.h

..

 #ifndef TELEPHONE_H #define TELEPHONE_H #include <iostream> #include <string> using std::string; class Telephone{ private: string name; string num; int areaCode; public: Telephone(int, string, string); Telephone(); ~Telephone(); bool setAreaCode(int); //Setters void setName(string); void setNumber(string); bool allNum(string); //Getters string getName(); string getNumber(); int getAreaCode(); //Checks bool checkX(int); bool checkY(int); }; #endif 

Telephone.cpp

..

 #include <iostream> #include <string> #include <stdio.h> #include <stdlib.h> #include "Telephone.h" using namespace std; Telephone::Telephone(){ areaCode = 0 name = ""; num = ""; } Telephone::Telephone(int aCode, string nam, string number){ areaCode = aCode; name = name; } Telephone::~Telephone(){ //Nope Nada } bool Telephone::allNum(string all){ size_t found = all.find_first_of(","); // string first = all.substr(0, found); string second = all.substr((found)+1, found+1); string third = all.substr( all.find_last_of(",")+1, all.length()); int x, y; //convert string to int values if(third.length() == 7){ x = atoi(third.substr(0,3).c_str()), y = atoi(third.substr(3,4).c_str()); }else{ cerr << "Your phone number is not valid" << endl; } int ac = atoi(second.substr(0, second.length()).c_str()); setName(first); if (!setAreaCode(ac)){ setAreaCode(100); return true; } if (!checkX(x) || !checkY(y)){ setNumber("1000000"); }else{ setNumber(third); } cerr << "The info provided is not valid" << endl; return false; } void Telephone::setNumber(string number){ num = number; } bool Telephone::setAreaCode(int aCode){ if(aCode >= 100 && aCode <= 999){ areaCode = aCode; return true; } return false; } void Telephone::setName(string theName){ name = theName; } bool Telephone::checkX(int x){ if(x >= 100 && x <= 999){ return true; } cerr << "First three digits are not valid" << endl; return false; } bool Telephone::checkY(int y){ if(y >= 0000 && y <= 9999){ return true; } cerr << "Last four digits are not valid" << endl; return false; } //Getters string Telephone::getName(){ return name; } string Telephone::getNumber(){ return num; } int Telephone::getAreaCode(){ return areaCode; } 

而我的主文件(也称为test.cpp)如下所示:

TEST.CPP

 #include <iostream> #include <string> #include "TBook.h" #include "Telephone.h" using namespace std; int main(int argc, char const *argv[]) { //Create a Rolodex TBook addressBook; return 0; } 

我也遇到了test.cpp这个错误

 /tmp/ccl8anRb.o: In function `main': test.cpp:(.text+0x24): undefined reference to `TBook::TBook()' test.cpp:(.text+0x38): undefined reference to `TBook::~TBook()' collect2: ld returned 1 exit status 

我认为这主要是一个编译错误,但我仍然不确定,而且我觉得我是模糊的设置“我的代码不起作用,我不知道为什么。 通常我会打破代码,并尝试不同的方法,直到它的工作,但我根本没有时间。 因此,我需要你的帮助。

Solutions Collecting From Web of "G ++对class :: function的未定义引用"