派生階層のクラスで2つの形式のコンストラクタを試してみると、結果は異なることが分かります。誰か私になぜ教えてもらえますか?以下はテストコードです。デフォルトのクラスコンストラクタの2つの形式は同等ですか?
//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
私の例をいくつかの機能コードで更新しました。 – RageD
もう一つの問題があります。上のコードはVS2010で正常にコンパイルされましたが、私は昨日使ったIDEでコンパイルできません。なぜそうなのか? – JDein