2017-06-05 3 views
-4

lovelyなC#を長年使った後、私のC++スキルは苦労しましたが、クラス内のメソッドを参照して値を渡す 作品:このメソッドは別のクラスに移動された場合VC++(エラーC2664)の別のオブジェクトのメソッドへの参照渡し方法

// WORKS 
class Foo { 
    void FooAdd(int i, int j, int &k) { 
    k = i + j; 
    } 
    void FooDo() { 
    int i = 20; 
    FooAdd(1, 2, i); 
    std::string s = std::to_string(i) + " (3: SUCCESS; 20: ERROR)"; 
    std::cout << s; 
    } 
} 

int main() { 
    Foo* foo = new Foo(); 
    foo->FooDo(); 
    return 0; 
} 

、VC++はもうファイルをコンパイルすることはできません。

// error C2664: "void Bar::BarAdd(int,int,int *)" : Konvertierung von Argument 3 von "int" in "int *" nicht möglich 
// error C2664: "void Bar::BarAdd(int,int,int *)" : cannot convert parameter 3 from 'int' to 'int *' 
class Bar { 
    void BarAdd(int i, int j, int &k) { 
    k = i + j; 
    } 
} 

class Foo { 
    void FooDo() { 
    int i = 20; 
    Bar* bar = new Bar(); 
    bar->BardAdd(1, 2, i); // error C2664 
    std::string s = std::to_string(i) + " (3: SUCCESS; 20: ERROR)"; 
    std::cout << s; 
    } 
} 

int main() { // unchanged 
    Foo* foo = new Foo(); 
    foo->FooDo(); 
    return 0; 
} 
+2

「BardAdd」が誤植であると仮定しますか?このコードが表示されるエラーを生成することは意味を成さない。 –

+1

クラス宣言が欠落した後に ';' sはかなり確実です。 – Bernard

+0

私は[mcve](https://stackoverflow.com/help/mcve)を作成することをお勧めします。プロセスに賭けると問題が見つかります。 –

答えて

0

あなたがタイプミスを修正した場合は、不足しているセミコロンを追加し、iostreamをインクルードし、メソッドをpublicにすると、うまくいきます。 https://ideone.com/lWDpbl

#include <iostream> 

class Bar { 
public: 
    void BarAdd(int i, int j, int &k) { 
    k = i + j; 
    } 
}; 

class Foo { 
public: 
    void FooDo() { 
    int i = 20; 
    Bar* bar = new Bar(); 
    bar->BarAdd(1, 2, i); // error C2664 
    std::string s = std::to_string(i) + " (3: SUCCESS; 20: ERROR)"; 
    std::cout << s; 
    } 
}; 

int main() { // unchanged 
    Foo* foo = new Foo(); 
    foo->FooDo(); 
    return 0; 
} 
関連する問題