首先是免责声明。我一直在阅读关于这个主题的众多问题,但我无法让我为我工作。大多数情况下,我的尝试是基于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的类定义,但如果需要,我可以编辑它。
答案 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
它会编译得很好。