我定义了这个类:
class Forum{
std::string title;
Thread* threads[5];
并且在Forum :: Forum的构造函数中我想传递一个字符串参数来定义title(它是type-string)
Forum::Forum(string *k) {
int i;
std::strcpy(&title.c_str(),k->c_str());
我遇到了问题。在这段代码中,我得到一个"左值作为一元'&'操作数"错误。 如果我擦除'&'我得到了错误"来自' const char *'的无效转换到#char;' [-fpermissive]"
我是如何设法将strcpy(或其他方法)的参数传递给字符串类型以避免上述错误?
答案 0 :(得分:7)
除非您打算允许省略标题,否则我建议您传递const
引用而不是指针:
Forum::Forum(const string& k)
这使得更清楚的是必须提供名称,并允许传递字符串文字作为名称:
Forum f("Main Forum");
然后,要复制std::string
,只需指定它或使用其复制构造函数即可。 strcpy
仅适用于C风格的char*
字符串。在这种情况下,请使用成员初始值设定项:
Forum::Forum(const string& k):
title(k)
{
}
答案 1 :(得分:3)
您无需使用strcpy
- 因为这不起作用
使用字符串赋值运算符
即
Forum::Forum(string *k) {
title = *k;
}
或者更好
Forum::Forum(const string& k) {
title = k;
}
或者初始化列表
Forum::Forum(const string& k) : title(k) { }
后者是最好的
答案 2 :(得分:0)
您应该更多地了解标准库。在C ++中,您可以将一个std::string
分配给另一个,而不会弄乱指针和strcpy
。
Forum::Forum(const std::string& k) {
// int i; you aran't using this anywhere, so why declare it?
// as pointed out by @EdHeal, this-> is not necessary here
/*this->*/ title = k;
}