2016-10-29 5 views
1

コンパイラエラーの理解に問題があります。 rolo指定されたオブジェクトに呼び出されて一時オブジェクトを、参照によって変数を受け取る関数に渡すことはできますか?

メンバ関数add()は、参照することによりCard変数を取ります

rolo.add(Card("Tony", "Hansen", "Writer", "12 E. St. NY, NY 33333", "555-9999")); 

ノン:

class Card{ 
public: 
    Card(string first,string last,string occupation,string address,string phoneNum); 
}; 

class Rolodex{ 
public: 
    void add(Card& card); 
}; 

int main() 
{ 
    Rolodex rolo; 
    rolo.add(Card("Tony", "Hansen", "Writer", "12 E. St. NY, NY 33333", "555-9999")); 
} 

コンパイラは、私は、この行にエラーを与えています-const lvalue 'Card'型への参照は、 'Card'型の一時的な型にバインドできません。

私は、引数として一時オブジェクトを持つメソッドを呼び出すことは合法だとは思わない。

Card variable("Tony", "Hansen", "Writer", "12 E. St. NY, NY 33333", "555-9999"); 
rolo.add(variable); 

は、なぜエラーが起こっている: 私は、次の代わりに行われた場合、それは優れていると思いますか?それを修正する方法はありますか?

+3

ようこそ!適切な大文字を使用するようにタイトルを編集しました。すべての大文字で書くと、人々はあなたがそれらに叫んでいると思うでしょう。 – templatetypedef

+5

"コピーコンストラクタ"を質問のどこでも "一時的"に置き換えると、それは意味をなさない... – Deduplicator

+0

'variable = new Card ...'はエラーです。これはJavaではありません –

答えて

1

非const値の参照番号Card& card)に一時的にバインドすることはできません。 1つの解決策は、代わりにconst左端参照として渡すことです。

void add(Card const & card); 
+0

実際には、一時的ではなく、非コンスの参照にバインドできます。非コンスではありません。 'Card &&'のように 'nonstop'の値の参照に一時的にバインドすることができます。 –

+0

右ですが、カード&&はC++ 98で動作しません... – HazemGomaa

+1

なぜあなたはC++ 98について話していますか?現在、C++ 1zはほぼ終了しています。 – Deduplicator

関連する問題