C++ MinGW 的链接器编程错误
C++ Linker Programming error with MinGW
我在代码中遇到链接器错误,无法检测到它。我认为错误出在addressBookType
课上,但我无法检测到它!
main
有什么问题吗?
还是问题出在类定义中?
~请帮忙
Compiler: MinGW GCC 4.6.2 32-bit
Executing g++.exe...
g++.exe "D:New FolderCppAssignment 4q4main.cpp" -o "D:New FolderCppAssignment 4q4main.exe" -I"E:Program FilesDev-CppMinGW32include" -I"E:Program FilesDev-CppMinGW32include" -L"E:Program FilesDev-CppMinGW32lib" -L"E:Program FilesDev-CppMinGW32lib" -static-libstdc++ -static-libgcc
E:DOCUME~1@$L@()V)LOCALS~1TempccHC7fsV.o:main.cpp:(.text+0x7a8): undefined reference to `addressBookType::addressBookType()'
E:DOCUME~1@$L@()V)LOCALS~1TempccHC7fsV.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);
}
嗯,很明显,你还没有实现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 类型将保持未初始化状态。
相关文章:
- 试图修复一个错误,该错误不会让我开始编程其余部分
- 分段错误(内核转储) C++面向对象编程
- C 编程错误|未申报的标识符
- 可视C++编程错误:C4703、C4700
- 面向对象编程错误
- C 中的编程错误
- Windows 套接字编程 - 错误代码 0
- C++ 库编程错误:ld:找不到体系结构x86_64的符号
- C++ MinGW 的链接器编程错误
- SIGSEGV动态编程错误-CodeChef
- "n"是未声明的错误消息以及其他可能的编程错误
- Arduino编程错误
- 编程错误-把我从程序中带了出来
- 如何解决套接字编程错误
- 编程错误,c++新手
- c++并行编程错误
- 在epoll边缘触发模式下,哪些常见的编程错误会导致CLOSE_WAIT卡住?
- C++ 编程错误:令牌之前"{"预期的非限定 id
- C++编程错误
- c++编程错误-运行时错误