cannot call member function ‘void senseauto::data_provider::Data_User::jsonKeysT...

2025年10月20日 14:55 响应: 3.09秒 状态: success

🚨 错误信息

[ 16%] Built target SQLiteCpp_cpplint /data/gerrit/workspace_GWM_repo/Platform/IC_NM_DataProvider/test/unittest/src/data_provider/relational/data/test_Data_User.cpp: In member function ‘virtual void senseauto::data_provider::Data_UserTest_JsonKeyToColumnName_Test::TestBody()’: /data/gerrit/workspace_GWM_repo/Platform/IC_NM_DataProvider/test/unittest/src/data_provider/relational/data/test_Data_User.cpp:363:40: error: cannot call member function ‘void senseauto::data_provider::Data_User::jsonKeysToColumnNameList(std::__cxx11::list<std::__cxx11::basic_string<char> >&)’ without object 363 | Data_User::jsonKeysToColumnNameList(keys); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~

🤖 AI解决方案

/data/gerrit/workspace_GWM_repo/Platform/IC_NM_DataProvider/test/unittest/src/data_provider/relational/data/test_Data_User.cpp: In member function ‘virtual void senseauto::data_provider::Data_UserTest_JsonKeyToColumnName_Test::TestBody()’:
/data/gerrit/workspace_GWM_repo/Platform/IC_NM_DataProvider/test/unittest/src/data_provider/relational/data/test_Data_User.cpp:363:40: error: cannot call member function ‘void senseauto::data_provider::Data_User::jsonKeysToColumnNameList(std::__cxx11::list<std::__cxx11::basic_string<char> >&)’ without object
  363 |     Data_User::jsonKeysToColumnNameList(keys);
      |     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~

错误翻译

错误:无法在没有对象的情况下调用成员函数 ‘void senseauto::data_provider::Data_User::jsonKeysToColumnNameList(std::__cxx11::list<std::__cxx11::basic_string<char> >&)’

原因分析
jsonKeysToColumnNameListData_User 类的一个成员函数,但你在测试代码中尝试将其作为静态函数调用,而它没有被声明为静态。

解决方案
在调用 jsonKeysToColumnNameList 函数之前,需要先创建一个 Data_User 类的实例(对象)。

// ... 在你的测试函数中 ...
senseauto::data_provider::Data_User dataUserInstance; // 创建 Data_User 对象
std::list<std::string> keys;
// ... 填充 keys ...
dataUserInstance.jsonKeysToColumnNameList(keys); // 使用对象调用成员函数
// ...

预防措施

  • 明确区分成员函数和静态函数的调用方式。

  • 在定义类时,仔细检查函数的访问修饰符(public, private, protected)以及是否应为静态。