2016-05-13 197 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的類定義,但如果需要,我可以編輯它。

+0

你在代碼中顯示的參數完全被忽略,你只需調用一個自由函數。難道在你原來的代碼中,do_stuff()或get_input()是'Symbol_Table'的成員函數嗎?如果不是,我都不瞭解代碼或問題。 – user463035818

+0

如果你只是'Symbol_Table Table_obj;'會發生什麼?最令人煩惱的解析...'Table_obj'是一個函數指針。 – 101010

+0

@ 101010:這不是最令人頭痛的解析(儘管它是相關的)。 –

回答

1
Symbol_Table Table_obj(); 

這並不是創建一個名爲Symbol_TableTable_obj變量,這是一個名爲Table_obj函數,它不帶任何參數,並返回Symbol_Table聲明。

執行下列操作之一:

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

您聲明名爲Table_obj函數將返回Symbol_Table。這不是你想要的。

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

這是這樣的:

int get(); // Function 

但是你想:

int get; // Variable 

混亂的原因:

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

的問題是,

Symbol_Table Table_obj(); 

不作名爲Table_obj一個Symbol_Table對象,而是使名爲Table_obj函數,它沒有返回一個Symbol_Table。更改爲

Symbol_Table Table_obj; 

它會編譯得很好。

+0

這就是我原先想的,但這樣做給我一個巨大的錯誤開始於「myassembler:在函數中_start':(.text + 0x0):多重定義'_start'」。 –

+0

@DwayneH:這是一些其他無關的問題。你現在需要去解決這個問題。以前你只是掩蓋它。 –

+0

哦,快樂。謝謝。回到谷歌我去。 –