为什么C ++无法识别main中的对象实例?

时间:2018-10-13 17:15:37

标签: c++

主要功能出现错误C2228。更具体地说,是说留空需要一个类/结构/联合。我很困惑,因为在某些情况下它似乎无法识别我的解析对象,并且不知道为什么会这样。据我所知,我已经实例化了一个对象,因此我应该能够使用点运算符访问所有公共方法。

parse_arguments.h

class parse_arguments:
public:
     std::string get_model_file();
private:
     std::string m_model_file;

parse_arguments.cpp

argument_parser::argument_parser() 
: m_output_file() 
, m_model_file()
, m_norm_mode(false)
, m_learn_mode(false)
, m_input_files()
, m_nbins(16)
{}

std::string argument_parser::get_model_file()
{
    return m_model_file;
}

std::string argument_parser::get_output_file()
{
    return m_output_file;
}

main.cpp

 int main(int argc, char** argv)
 {

     normalizer_tool::argument_parser parse;

     if (!parse.parse_arguments(argc, argv)) //no error here...
     {
        return 1;
     }

/// Load the data model
    if (!parse.get_model_file.empty()) //error here c222
    {
        //do stuff here
    }

    for (auto it = parse.get_input_files.begin(); success && it != 
    parse.get_input_files.end(); it++) //error here c222
    { //do more stuff here }

1 个答案:

答案 0 :(得分:0)

代码有很多错误,我不知道从哪里开始。

首先,类定义的冒号“:”太多,需要大括号“ {”和“}”。更正:

class parse_arguments
{
    ...
};

第二个缺少的方法调用括号“()”。更正:

if (!parse.get_model_file().empty())

和:

for (auto it = parse.get_input_files().begin(); success && it != 
parse.get_input_files().end(); it++) ...

第三,在迭代过程中多次重新创建input_files列表,这可能有效也可能无效。仅当input_files()方法是const方法时,这才是安全的。为了安全起见,请改用:

const auto input_files = parse.get_input_files();
for (auto it = input_files.begin(); success && it != 
input_files.end(); it++) ...

...等等。我希望这可以帮助您重新走上正轨。