2016-05-03 16 views
-1

ここではエラーが発生しています。C++でのコンパイラエラー

CruiseShip.h:10: error: expected ‘;’ before ‘::’ token

CruiseShip.cpp:8: error: expected ‘)’ before ‘name’ make: ***

[CruiseShip.o] Error 1

CruiseShip.h

CruiseShip(std::string name,std::string year, int maxPassengers)::Ship(std::string name,std::string year); 

CruiseShip.cpp

CruiseShip(string name, string year, int maxPassengers)::Ship(string name, string year){ 
    maxPassengers=0; 
} 

これらは、エラーが発生したラインのです。ここで

は、コードの残りの部分である: CruiseShip.cpp

#include <iostream> 
#include "Ship.h" 
#include "CruiseShip.h" 
using namespace std; 



CruiseShip(string name, string year, int maxPassengers)::Ship(string name, string year){ 
    maxPassengers=0; 
} 

void CruiseShip::setPass(int maxPassengers){ 
    this->maxPassengers=maxPassengers; 
} 
int CruiseShip::getPass(){ 
    return maxPassengers; 
} 

void CruiseShip::print(){ 
    cout<<"The name of the ship is "<<getName()<<endl; 
    cout<<"The capacity of the ship is "<<maxPassengers<<endl; 

} 

CruiseShip.h

#ifndef CRUISESHIP_H_ 
#define CRUISESHIP_H_ 
#include <string> 
class CruiseShip: public Ship{ 
protected: 
    int maxPassengers; 


public: 
    CruiseShip(std::string name,std::string year, int maxPassengers)::Ship(std::string name,std::string year); 
    void setPass(int); 
    int getPass(); 
    virtual void print(); 

}; 
#endif 
+0

これはテンプレートになっていますか?それはあなたがテンプレートを使う方法ではありません。 –

+1

私はこれらの行が何をすべきかはよく分かりません。 [mcve]を投稿してください。 –

+0

コードを投稿してください。 –

答えて

2

この行は何の意味を作るようには見えません。
あなたはそれが何をすると思われますか?

CruiseShip(std::string name,std::string year, int maxPassengers)::Ship(std::string name,std::string year); 

それはclass CruiseShipのコンストラクタの開始のように見えますが、その後class Shipのコンストラクタのように見えるを開始する前に、スコーピング(::)を持っています。ここで

は、私はあなたが意味する何を考えている:

ヘッダーファイル(.h):インプリメンテーションで

#pragma once 
#include <string> 
using std::string; 
class CruiseShip : 
    public Ship // Class inherits from base-class Ship 
{ 
    // Constructor takes 3 parameters: 
    CruiseShip(const string& name, const string& year, int maxPassengers); 
}; 

ファイル(.cpp):

// Implementation of the Constructor, which begins by passing 
// name and year to the Base-Class constructor. 
// Then completes the constructor by handling the maxPassengers parameter. 
CruiseShip::CruiseShip(const string& name, const string& year, int maxPassengers): 
    Ship(name, year) // Call the base-class constructor 
{ 
    this->maxPassengers = maxPassengers; // Also assign member variable. 
} 


数その他のメモ:

  • 値渡しの理由がない場合は、通常、const-referenceで変数を渡す必要があります。これにより、不要なコピーコンストラクタを回避できます。

  • の保護は、ほとんどの主要コンパイラでサポートされている#pragma onceを使用して回避してください。

  • Do not do using namespace std;。それは本当に大きな名前空間全体をもたらします。ちょうどあなたが必要なものをインポート:using std::string;Shipから(This Topicを参照)どうやら

3

CruiseShip継承。

宣言は、コンストラクタのプロトタイプは、

CruiseShip(std::string name, std::string year, int maxPassengers); 

であると定義が初期化したものだけを言う必要があります:のみ1つのコロンがあることと、基本クラスの初期化がdoesnのこと

CruiseShip::CruiseShip(string name, string year, int maxPassengers) 
    : Ship(name, year), 
    maxPassengers(maxPassengers) 
{ 

} 

注意を関数呼び出しのように、型を記述する必要はありません。
コンストラクタの定義には、スコープ指定CruiseShip::が必要です。公共宣言で

Ship(std::string,std::string); 

+0

これを入力していました。あなたは速すぎます – Hearner

+0

あなたは 'maxPassengers'のために矛盾する変数を持っており、あなたはそれを使用せずに' maxPassengers'パラメータを放棄します。 – abelenky

+0

ダムの質問、ヘッダーファイルの宣言は正しいですか?なぜなら、私が変更すれば、コンパイラはそれらが異なるので、一致する関数を見つけることができないからです。 @molbdnilo – willh231

0

あなたの船のクラスは、このような何かを持っている必要があります。

CruiseShip::CruiseShip(string name, string year, int maxPassengers):Ship(name,year){ 
    maxPassengers=0; 
} 

あなたはによって与えられたパラメータを取りパラメータShip(std::string,std::string)持つコンストラクタを呼び出している:これはあなたがCruiseShip

あなたが内在して正しいコンストラクタを作る方法でパラメータを与えるとき、あなたが呼んでいるものですので、この方法です。 CruiseShip。そしてあなたは単にあなたにどの変数を与えているのかを教えてください。

あなたのCruiseShipクラスは間違っているからです。あなたは船に最初に電話するようにプログラムに言わないでください

#ifndef CRUISESHIP_H_ 
#define CRUISESHIP_H_ 
#include <string> 
class CruiseShip: public Ship{ 
protected: 
    int maxPassengers; 


public: 
    CruiseShip(std::string name,std::string year, int maxPassengers); 
    void setPass(int); 
    int getPass(); 
    virtual void print(); 

}; 
#endif 
関連する問題