2016-05-13 146 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

哦,快乐。谢谢。回到谷歌我去。 –