2016-04-06 10 views
-5

私はC++の学習を始めました。次のような質問があります。main()関数を使って、次のクラス宣言を考えてみましょう。 main()関数には2つのエラーがあります。名前を付け、修正方法を説明します。タイプクラスのC++配列

//Question Three Start 
#include <iostream> 
#include <string> 
using namespace std; 

class Restaurant 
{ 
public: 
    Restaurant(); 
    int getTables(); 
    int getTempStaff(); 
    int getPermStaff(); 
    string getShifts(); 
private: 
    string Menu; 
    int Tables; 
    int TempStaff; 
    int PermStaff; 
    string Shifts[3]; 
}; 

int main() 
{ 
    Restaurant mimmos; 
    //.........(additional code) 
    string menu = mimmos.Menu; 
    //.........(additional code) 
    //get information about shift 3 
    cout << "Shift info:" << mimmos[2].getShifts() << endl; 
    return 0; 
} 

([2] .getShifts私は最初の問題は、メンバ変数のメニューがプライベートであることであることを知っているが、私はmimmosで問題を解決するかどうかはわからない)とどのようにアクセサ/ミューテータを使用する方法関数。どんな助けでも大歓迎です。あなただけRestaurantクラスの単一のオブジェクトを作成しているので

+0

'レストランのmimmos;' - ではない配列、 '文字列メニュー= mimmos.Menu;' - – LogicStuff

答えて

0

最初に正しく識別したのは、プライベートメンバーへのアクセスが原因です。修正?メニューを返すパブリックメンバ関数:

string getMenu(); 

第二は、Infactは、それが単一のインスタンスである場合、アレイとして「mimmos」を治療するための無効の試みです。上記のコメントは、それが第3のシフトについての情報を得る試みであることを示しているからです。インデックスパラメータを取るために「getShifts」機能を変更します:

string getShift(size_t n) { 
    return Shifts[n]; 
} 

、その後、あなたが書くことによって第三のシフトについての情報を取得します:

cout << "Shift info: " << mimmos.getShift(2) << std::endl; 

または変更getShifts()に次の2つの選択肢があります配列ポインタを返す:

string* getShifts(); 

は、次のように記述します。

cout << "Shift info: " << mimmos.getShifts()[2] << std::endl; 
-1

、ないarrayますので、そこindexで使用することはできません。

private変数Menuフィールドを返しますpublic方法を公開へのアクセスにも

cout << "Shift info:" << mimmos.getShifts() << endl; 

を次のように使用する必要があります。

これが役に立ちます。

+0

アクセスすることはできませんが、直接getShiftsライン上のコメントを読んでください。 – kfsone

0

このコードのツリーに問題があります。

string menu = mimmos.Menu; 

メニューはレストランのクラスにプライベート宣言されています。

Restaurant mimmos; 
//get information about shift 3 
cout << "Shift info:" << mimmos[2].getShifts() << endl; 

"mimmos"は単一のオブジェクトであり、配列ではありません。この場合、角括弧の演算子「[]」は配列メンバーにアクセスするために使用されます。あなたがシフト数3にアクセスしたいが、「getShifts」関数の戻り値の型は、単一の文字列オブジェクトである

を「シフト3についての情報を得る」:

はまた、その線の上にコメントすることに従って。ですから、関数の先頭に角括弧を移動した場合でも:

cout << "Shift info:" << mimmos.getShifts()[2] << endl; 

あなたは、単一の文字(文字列の3番目の文字)を取得します。

std::string::operator[]