C ++按引用传递对象

时间:2016-05-13 11:33:07

标签: c++ object pass-by-reference

首先是免责声明。我一直在阅读关于这个主题的众多问题,但我无法让我为我工作。大多数情况下,我的尝试是基于this链接,这似乎意味着只要函数定义具有&在其中,然后我可以通过名称将对象传递给函数。但是我不断收到以下错误:

  

assembler.cpp:在函数'int main()'中:   assembler.cpp:56:21:错误:从'Symbol_Table(*)()'类型的右值开始无效初始化'Symbol_Table&'类型的非const引用     get_input(Table_obj);

     

assembler.cpp:30:6:错误:传递'void get_input(Symbol_Table&)'的参数1    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的类定义,但如果需要,我可以编辑它。

3 个答案:

答案 0 :(得分:1)

\W

这不会创建一个名为Symbol_Table Table_obj(); 的{​​{1}}类型的变量,它是一个名为Table_obj的函数的声明,它不带参数并返回{{ 1}}。

做其中一项:

Symbol_Table

答案 1 :(得分:1)

您正在声明名为Table_obj的函数,该函数将返回Symbol_Table。这不是你想要的。

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

这就像:

Table_obj

但你想要:

Symbol_Table

混乱的原因:

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

答案 2 :(得分:1)

问题在于

Symbol_Table Table_obj();

不会创建名为Symbol_Table的{​​{1}}对象,而是创建一个名为Table_obj的函数,该函数不执行任何操作并返回Table_obj。将其更改为

Symbol_Table

它会编译得很好。