Вы можете воспроизвести эту ошибку с помощью этого кода.
#include <string>
struct X
{
void foo(std::string& n)
{
}
void bar()
{
std::string* s;
foo(s);
}
};
prog.cpp: In member function ‘void X::bar()’:
prog.cpp:12: error: no matching function for call to ‘X::foo(std::string*&)’
prog.cpp:5: note: candidates are: void X::foo(std::string&)
Предлагаемый символ ссылки не очень значим.Вы действительно пытаетесь передать указатель, где ожидается значение, и компилятор угадывает, как может выглядеть подходящая функция для этого вызова.(Это, вероятно, означает, что вы передаете lvalue, поэтому функция может принимать его по ссылке.)
Также обратите внимание, что в нем перечислены кандидаты, функции с тем же именем, но с неподходящими типами параметров.
Теперь, когда вы разместили реальный код, возможно, проверьте, какой тип шаблона используется в вашем ошибочном экземпляре (об этом должно упоминаться и в сообщении об ошибке).Вы также опубликовали сообщения об ошибках:
App/CycCmdLine.cpp: In member function ‘std::string CycCmdLine::getEnvironment()’:
App/CycCmdLine.cpp:245: error: no matching function for call to ‘CycCmdLine::getValue(const char [16], std::string&)’
Это первая ошибка.Перевод: класс CycCmdLine не имеет функции-члена getValue
(и при этом нет глобальной функции с таким именем).Функция с таким именем является членом CmdLine
.
./../CmdLine/CmdLine.h: In member function ‘bool CmdLine::getValue(std::string, T&) [with T = std::string*]’:
App/CycCmdLine.cpp:384: instantiated from here
./../CmdLine/CmdLine.h:237: error: no matching function for call to ‘CLItem::getValue(std::string*&)’
Это вторая ошибка, о которой вы спрашиваете.Вы передаете указатель на строку в строке 384 CycCmdLine.cpp
(которая находится в другом месте, чем вы думали).