當我在派生層次結構的類中嘗試兩種形式的構造函數時,結果證明是不同的。有誰能告訴我爲什麼?以下是測試代碼。默認類構造函數的兩種形式是否等價?
//Person.h
#ifndef PERSON_H_
#define PERSON_H_
#include<string>
using std::string;
class Person{
private:
string firstname;
string lastname;
public:
Person(const char *fn="NoName", const char *ln="NoName"); //A
Person(const string &fn, const string &ln);
virtual ~Person(){}
};
class Gunslinger:virtual public Person{
private:
int notchnum;
public:
Gunslinger(const char*f="unknown",const char*n="unknown",int not=0);//B
virtual ~Gunslinger(){}
};
class PokerPlayer:virtual public Person{
public:
PokerPlayer(const char*fn="unknown", const char*ln="unknown");//C;
virtual ~PokerPlayer(){}
};
class BadDude:public Gunslinger,public PokerPlayer{
public:
BadDude(const char*fn="unknown", const char*ln="unknown", int notc=0);//D
};
#endif
//PersonDefinition.cpp
#include"Person.h"
#include<iostream>
#include<cstdlib>
using std::cout;
using std::endl;
using std::cin;
Person::Person(const char*fn, const char*ln):firstname(fn),lastname(ln){
}
Person::Person(const string &fn,const string &ln):firstname(fn),lastname(ln){
}
Gunslinger::Gunslinger(const char*fn,const char*ln, int not):Person(fn,ln),notchnum(not){
}
PokerPlayer::PokerPlayer(const char*fn,const char*ln):Person(fn,ln){
}
BadDude::BadDude(const char*fn, const char*ln, int notc):Person(fn,ln),PokerPlayer(fn, ln),Gunslinger(fn,ln,notc){
}
//PersonTest.cpp
#include<iostream>
#include "Person.h"
int main(){
Person a("Jack","Husain");
PokerPlayer b("Johnson","William",8);
Gunslinger c("Mensly","Sim");
}
所以,這裏的問題。上面的程序無法使用默認構造函數對所有參數使用默認值進行編譯,並在「!」之前拋出錯誤消息,說明「expected」,「或」...「令牌「,但如果我將行A,B,C,D中的默認構造函數替換爲不帶參數的形式,程序將編譯並運行成功。請問任何人都可以告訴我爲什麼?以下是錯誤消息。
我根據您的意見修改了代碼,但該方案仍無法編譯,在「!」之前拋出諸如「expected」,「或」之類的錯誤信息。令牌「和」預期的主要表達式之前「)」令牌「。沒有感嘆號。 – JDein 2012-04-26 15:34:02
我用一些功能代碼更新了我的示例,以瞭解它的外觀。 – RageD 2012-04-26 15:39:03
我有另一個問題。上面的代碼使用VS2010編譯成功,但無法使用昨天使用的IDE進行編譯。爲什麼這樣? – JDein 2012-04-27 06:45:36