2012-04-13 92 views
0

我面臨着我的代碼中的鏈接器錯誤,我無法檢測到它。 我認爲錯誤是在addressBookType類,但我無法檢測到它!C++鏈接器編程錯誤與MinGW

main有問題嗎?

還是問題在類定義中?

〜請幫

Compiler: MinGW GCC 4.6.2 32-bit 
Executing g++.exe... 
g++.exe "D:\New Folder\Cpp\Assignment 4\q4\main.cpp" -o "D:\New Folder\Cpp\Assignment 4\q4\main.exe" -I"E:\Program Files\Dev-Cpp\MinGW32\include" -I"E:\Program Files\Dev-Cpp\MinGW32\include" -L"E:\Program Files\Dev-Cpp\MinGW32\lib" -L"E:\Program Files\Dev-Cpp\MinGW32\lib" -static-libstdc++ -static-libgcc 
E:\DOCUME~1\@[email protected]()V)\LOCALS~1\Temp\ccHC7fsV.o:main.cpp:(.text+0x7a8): undefined reference to `addressBookType::addressBookType()' 
E:\DOCUME~1\@[email protected]()V)\LOCALS~1\Temp\ccHC7fsV.o:main.cpp:(.text+0x7d6): undefined reference to `addressBookType::addressBookType()' 
collect2: ld returned 1 exit status 

的代碼是:

#include<iostream> 
#include<cstdlib> 
#include<fstream> 
#include<string> 

using namespace std; 

//////////////////////////////"personType" is from D.S Malik Course Website 
////////////***Class person Start 


class personType 
{ 
public: 
    void print() const; 
     //Function to output the first name and last name 
     //in the form firstName lastName. 


    void setName(string first, string last); 
     //Function to set firstName and lastName according 
     //to the parameters. 
     //Postcondition: firstName = first; lastName = last 

    string getFirstName() const; 
     //Function to return the first name. 
     //Postcondition: The value of firstName is returned. 

    string getLastName() const; 
     //Function to return the last name. 
     //Postcondition: The value of lastName is returned. 

    personType(string first, string last); 
     //Constructor 
     //Sets firstName and lastName according to the parameters. 
     //The default values of the parameters are null strings. 
     //Postcondition: firstName = first; lastName = last 

private: 
    string firstName; //variable to store the first name 
    string lastName; //variable to store the last name 
}; 
/////////Class person End***/////////// 
// IMPLEMENTATION OF "PersonType" CLASS // 

///////////////// IMP START //////////////////// 
personType::personType(string first="",string last=""){ 

} 

void personType::setName(string first,string last){ 
    firstName=first; 
    lastName=last; 

} 

string personType::getFirstName() const{ 

return firstName; 
} 

string personType::getLastName() const{ 
return lastName; 
} 

void personType::print() const{ 
    cout<<firstName<<" "<<lastName<<endl; 
} 
////////////////// IMP END //////////////////// 



///////////////////////////////////////////////////////////////////////////////////////////// 


////////***class addressType Start 

class addressType{ 


    private: 
    string stAddress; 
    string city; 
    string state; 
    string zipcode; 

    public: 
     addressType(); 
     addressType(string,string,string,string); 
     void setAddress(string); 
     string getAddress(); 
     void setCity(string); 
     string getCity(); 
     void setState(string); 
     string getState(); 
     void setZipcode(string); 
     string getZipcode(); 

}; 

// IMPLEMENTATION OF "addressType" CLASS // 

///////////////// IMP START //////////////////// 
addressType::addressType(string=" ",string=" ",string=" ",string=" "){ 

} 

void addressType::setAddress(string addr){ 
    stAddress=addr; 
} 

string addressType::getAddress(){ 
    return stAddress; 
} 

void addressType::setCity(string cit){ 
    city=cit; 
} 

string addressType::getCity(){ 
    return city; 
} 

void addressType::setState(string sta){ 
    state=sta; 
} 

string addressType::getState(){ 
    return state; 
} 

void addressType::setZipcode(string zip){ 
    zipcode=zip; 
} 

string addressType::getZipcode(){ 
    return zipcode; 
} 
///////////////// IMP END //////////////////// 

//////////class addressType End*** 
///////////////////////////////// 


////////////////////////////////// 
//////***class extPersonType Start 
class extPersonType { 

    private: 
     string relation; 
     string phNo; 

    public: 
     extPersonType(); 
     extPersonType(string,string); 
     void setRelation(string); 
     string getRelation(); 
     void setphNo(string); 
     string getphNo(); 


}; 


// IMPLEMENTATION OF "extPersonType" CLASS // 
///////////////// IMP START //////////////////// 

extPersonType::extPersonType(string =" " ,string = " "){ 

} 

void extPersonType::setRelation(string rel){ 
    relation=rel; 
} 

string extPersonType::getRelation(){ 
    return relation; 
} 

void extPersonType::setphNo(string ph){ 
    phNo=ph; 
} 

string extPersonType::getphNo(){ 
    return phNo; 
} 

///////////////// IMP END //////////////////// 
//////////class extPersonType End*** 

/////////////////////////////////////////////////////////////////////////////////////////// 


//////////////////////////////"dateType" is from D.S Malik Course Website 
////////***class DateType Start 

class dateType 
{ 
public: 
    void setDate(int month, int day, int year); 
     //Function to set the date. 
     //The member variables dMonth, dDay, and dYear are set 
     //according to the parameters. 
     //Postcondition: dMonth = month; dDay = day; 
     //    dYear = year 

    int getDay() const; 
     //Function to return the day. 
     //Postcondition: The value of dDay is returned. 

    int getMonth() const; 
     //Function to return the month. 
     //Postcondition: The value of dMonth is returned. 

    int getYear() const; 
     //Function to return the year.  
     //Postcondition: The value of dYear is returned. 

    void printDate() const; 
     //Function to output the date in the form mm-dd-yyyy. 

    dateType(int month = 1, int day = 1, int year = 1900); 
     //Constructor to set the date 
     //The member variables dMonth, dDay, and dYear are set 
     //according to the parameters. 
     //Postcondition: dMonth = month; dDay = day; dYear = year; 
     //    If no values are specified, the default 
     //    values are used to initialize the member 
     //    variables. 

private: 
    int dMonth; //variable to store the month 
    int dDay; //variable to store the day 
    int dYear; //variable to store the year 
}; 
//////////class dateType End*** 
///////////////////////////////// 


// IMPLEMENTATION OF "DateType" CLASS // 
///////////////// IMP START //////////////////// 

void dateType::setDate(int month, int day, int year) 
{ 
    dMonth = month; 
    dDay = day; 
    dYear = year; 
} 

int dateType::getDay() const 
{ 
    return dDay; 
} 

int dateType::getMonth() const 
{ 
    return dMonth; 
} 

int dateType::getYear() const 
{ 
    return dYear; 
} 

void dateType::printDate() const 
{ 
    cout << dMonth << "-" << dDay << "-" << dYear; 
} 

    //Constructor with parameters 
dateType::dateType(int month, int day, int year) 
{ 
    dMonth = month; 
    dDay = day; 
    dYear = year; 
} 
//////////////// IMP END ///////////////////// 

//////////////////////////////////////////////////////////////////////////////// 


//////***class addressBookType Start 

class addressBookType { 

private: 
    string FirstName; //variable to store the first name 
    string LastName; //variable to store the last name 
    string StAddress; 

    string City; 
    string State; 
    string Zipcode; 
    string Relation; 
    string PhNo; 
    int DMonth; //variable to store the month 
    int DDay; //variable to store the day 
    int DYear; //variable to store the year 

protected: 

    addressType obj1; 
    dateType obj2; 
    extPersonType obj3; 

public: 
    addressBookType(); 
    static int count; 
    void loadData(addressBookType *&ptr); 

}; 

//////////class addressType End*** 
///////////////////////////////// 

// IMPLEMENTATION OF "addressBookType" CLASS // 
///////////////// IMP START //////////////////// 

void addressBookType::loadData(addressBookType *&ptr){ 

    ifstream fin; 
    ifstream fout; 

    string tempName; 
    cout<<"Enter file name:"<<endl; 


      if(!fin){ 

       cout<<"Cannot open the image file : "<<endl; 
       cout<<"Input Failure"<<endl; 
       system("pause"); 


      } 

      else{ 

       for(int i=0;!fin.eof();i++){ 

        fin>>FirstName; 
        fin>>LastName; 
        fin>>DDay; 
        fin>>DMonth; 
        fin>>DYear; 
        getline(fin,StAddress); 
        getline(fin,City); 
        getline(fin,State); 
        fin>>Zipcode; 
        fin>>PhNo; 
        fin>>Relation; 

        cout<<FirstName<<LastName<<DDay<<DMonth<<DYear<<StAddress<<City<<State<<Zipcode<<PhNo<<Relation<<endl; 

       } 

      } 

} 

int main(){ 

    addressBookType *ptr; 
    addressBookType obj; 
    ptr=new addressBookType[500]; 
    obj.loadData(ptr); 

    system("pause"); 
    return(0); 
} 

回答

4

嗯,這是很清楚,你有沒有實現的默認構造函數addressBookType

class addressBookType { 
//... 
    addressBookType();      //declare constructor 
    void loadData(addressBookType *&ptr); //declare method 
}; 

//missing constructor implementation 

void addressBookType::loadData(addressBookType *&ptr){ //implement method 
//... 
} 

要解決錯誤,只需添加

addressBookType::addressBookType() { } 

請注意,這將您string成員初始化爲空字符串,對象

addressType obj1; 
dateType obj2; 
extPersonType obj3; 

各自的默認構造函數和POD類型將保持未初始化。