Я возвращаюсь к C ++ после долгих лет, потраченных на другие технологии, и застрял в странном поведении при вызове некоторых методов, принимающих std :: string в качестве параметров:
Пример звонка:
LocalNodeConfiguration *LocalNodeConfiguration::ReadFromFile(std::string & path)
{
// ...
throw configuration_file_error(string("Configuration file empty"), path);
// ...
}
Когда я компилирую, я получаю это (я обрезал имена файлов для удобства чтения):
/usr/bin/g++ -g -I/home/shtong/Dev/OmegaNoc/build -I/usr/share/include/boost-1.41.0 -o CMakeFiles/OmegaNocInternals.dir/configuration/localNodeConfiguration.cxx.o -c /home/shtong/Dev/OmegaNoc/source/configuration/localNodeConfiguration.cxx
.../localNodeConfiguration.cxx: In static member function ‘static OmegaNoc::LocalNodeConfiguration* OmegaNoc::LocalNodeConfiguration::ReadFromFile(std::string&)’:
.../localNodeConfiguration.cxx:72: error: no matching function for call to ‘OmegaNoc::configuration_file_error::configuration_file_error(std::string, std::basic_string<char, std::char_traits<char>, std::allocator<char> >&)’
.../configurationManager.hxx:25: note: candidates are: OmegaNoc::configuration_file_error::configuration_file_error(std::string&, std::string&)
.../configurationManager.hxx:22: note: OmegaNoc::configuration_file_error::configuration_file_error(const OmegaNoc::configuration_file_error&)
Итак, насколько я понимаю, компилятор считает, что мой параметр path в какой-то момент превратился в basic_string, поэтому не нашел перегрузки конструктора, которую я хочу использовать. Но я не совсем понимаю, почему произошла эта трансформация.
Некоторые поиски в сети предложили мне использовать g ++, но я уже использовал его. Так что любой другой совет будет оценен:)
Спасибо