В msvc у меня есть такие функции, и он строит, но в gcc ему это не нравится.Почему msvc позволяет мне это делать, но не gcc/g ++?
void classname::a(std::string &text)
{
stdStringFromClass = text;
}
void classname::b(char *text)
{
a(std::string(text));
}
Проблема здесь заключается в &, GCC, я думаю, обеспокоен тем, что, так как я только что создал, что станд :: строка, что передача по ссылке является рискованным, поэтому он не строит, но MSVC оленья кожа даже предупредить меня ,
Почему этот неправильный C++ для gcc. Я продолжаю слышать, что msvc более строгий, чем gcc.
Благодаря
Ошибка
AguiWidgetBase.cpp: In member function ‘void AguiWidgetBase::setText(char*)’:
AguiWidgetBase.cpp:91:27: error: no matching function for call to ‘AguiWidgetBase::setText(std::string)’
AguiWidgetBase.cpp:80:6: note: candidates are: void AguiWidgetBase::setText(std::string&)
AguiWidgetBase.cpp:88:6: note: void AguiWidgetBase::setText(char*)
это было бы нормально?
void classname::a(std::string &text)
{
stdStringFromClass = text;
}
void classname::b(char *text)
{
std::string k = text;
a(k);
}
Нужно больше контекста. Какая ошибка вы получаете, что такое «stdStringFromClass» и т. Д. – vanza
stdStringFromClass является std :: string – jmasterx
MSVC не является более строгим, чем gcc, что кажется мне довольно обратным. Ошибка заключается в том, что временное не может быть привязано к неконстантной ссылке. Однако сложно сказать вам решение, когда вы указали очень маленький код. Вам нужно изменить параметр? Если нет, сделайте это константой-ссылкой. В чем смысл перегрузки 'char *' (должна быть 'const char *') вместе с перегрузкой 'std :: string'? 'std :: string' может быть неявно построена из' const char * '. – GManNickG