2016-05-13 10 views
-1

最初に免責事項。私はこのトピックに関する質問の多数を読んできましたが、私は私のために働くことはできません。私はほとんどの場合、thisというリンクから私の試行を引っ張っていました。それは、関数定義が&である限り、名前で関数にオブジェクトを渡すことができます。しかし、私は次のエラーが発生し続ける:参照でオブジェクトを渡すC++

assembler.cpp: In function ‘int main()’: assembler.cpp:56:21: error: invalid initialization of non-const reference of type ‘Symbol_Table&’ from an rvalue of type ‘Symbol_Table (*)()’ get_input(Table_obj);

assembler.cpp:30:6: error: in passing argument 1 of ‘void get_input(Symbol_Table&)’ void get_input(Symbol_Table& Table_ptr)

私の実際のコードは以下のとおりです。 get_input関数は、ファイルから読み込んで、別の型のオブジェクトを作成するだけです。プログラムが実行される過程で、Symbol_Tableオブジェクトにメンバーが変更され、参照なしでconstを渡す必要があります。これは、私が見つけることができる唯一の "ソリューション"でした。

void get_input(Symbol_Table& Table_ptr) 
{ 
    do_stuff(); 
} 

int main() 
{ 
    Symbol_Table Table_obj(); 
    get_input(Table_obj); 
} 

Symbol_Tableのクラス定義は必要ではないと思いますが、必要に応じて編集することができます。タイプSymbol_TableTable_objという変数を作成しません

+0

のコードでは、パラメータが完全に無視されているだけで、空き関数が呼び出されます。 'do_stuff()'または 'get_input()'が元のコードで 'Symbol_Table'のメンバ関数なのでしょうか?そうでない場合、私はコードも質問も理解しません。 – user463035818

+0

'Symbol_Table Table_obj;'だけの場合はどうなりますか?最も困惑しているのは... 'Table_obj'は関数ポインタです。 – 101010

+0

@ 101010:これは最も厄介な構文解析ではありません(関連していますが)。 –

答えて

1
Symbol_Table Table_obj(); 

、それは引数を取らず、Symbol_Tableを返すTable_objと呼ばれる関数の宣言です。

は、これらのいずれかを実行します。

Symbol_Table Table_obj; 
Symbol_Table Table_obj{}; //C++11 
1

あなたはSymbol_Tableを返しますTable_objという名前の関数を宣言しています。これはあなたの意図ではありません。

int get(); // Function 

しかし、あなたがしたい::

int main() 
{ 
    Symbol_Table Table_obj; // Construct an object 
    get_input(Table_obj); 
} 

これは似ている

int get; // Variable 

混乱の理由:

int get(0); // int constructor takes one argument 
1

問題が

ということです
Symbol_Table Table_obj(); 

Table_objという名前Symbol_Tableオブジェクトを作る代わりに、何もとらず、Symbol_Tableを返すTable_objという名前の関数を作成しません。それを

Symbol_Table Table_obj; 

に変更してください。これはうまくコンパイルされます。

+0

これは私がもともと考えていたものですが、 "myassembler:In function' _start ':(.text + 0x0): '_start'の多重定義から始まる大きなエラーです。 –

+0

@DwayneH:それは他に関係のない問題です。今問題を解決する必要があります。以前はあなたはそれをマスキングしていました。 –

+0

ああ喜び。ありがとう。 googleに戻る私は行く。 –