失踪'';类的前标识符错误/问题 我学习C++和类。由于某些原因,我无法让这个特定的函数运行,如果我把它注释掉,其他所有的函数都会运行。编辑:*我意识到我没有显示正确的信息,但问题不是案例陈述,因为即使删除了问题,问题仍然存在。我为card.h添加了整个代码
在卡片中失踪'';类的前标识符错误/问题 我学习C++和类。由于某些原因,我无法让这个特定的函数运行,如果我把它注释掉,其他所有的函数都会运行。编辑:*我意识到我没有显示正确的信息,但问题不是案例陈述,因为即使删除了问题,问题仍然存在。我为card.h添加了整个代码,c++,string,class,C++,String,Class,在卡片中 \ifndef\u卡_ #定义卡_ #包括 班级卡 { 私人: 内服; 整数秩; 公众: //默认构造函数 卡片(); void-genRandom(); 字符串getRank(); 字符串getSuit(); 作废打印卡(); 布尔萨美卡(卡); 布尔萨梅斯uit(卡); 布尔·萨梅兰克(卡); }; #恩迪夫 in card.cpp 字符串卡::getRank() { cout案例-s后面应该跟数字: case 9: return "Nine"; case 10: return
\ifndef\u卡_
#定义卡_
#包括
班级卡
{
私人:
内服;
整数秩;
公众:
//默认构造函数
卡片();
void-genRandom();
字符串getRank();
字符串getSuit();
作废打印卡();
布尔萨美卡(卡);
布尔萨梅斯uit(卡);
布尔·萨梅兰克(卡);
};
#恩迪夫
in card.cpp
字符串卡::getRank()
{
cout案例
-s后面应该跟数字:
case 9: return "Nine";
case 10: return "Ten";
返回后无需中断
您应该提供一个默认声明:
default: return "";
<代码> > 1′<代码>依赖于字符编码。在我的UTF-8 Linux机器上,字符<代码> 1 < /code >(注意到代码> > ''/code >在C或C++代码中)(编码为)数字49已更新:对于您的最新更新,编译器无法识别字符串。您应将其与适当的命名空间一起使用,即标准:
:
std::string getRank();
std::string getSuit();
...
std::string Card::getRank()
{
...
}
注意:以下是OP问题的旧版本。
对于第一个错误,不能仅根据函数的返回值重载函数
string Card::getSuit(void);
int Card::getSuit(void);
C++11§13.1可重载声明
某些函数声明不能重载:
-仅在返回类型上不同的函数声明不能重载
-如果具有相同名称和相同参数类型列表的成员函数声明是静态成员函数声明,则不能重载这些声明(9.4)
-[……]
对于第二个错误,您应该完成default
语句:
default: return "";
p.S.:'10'
-'13'
是实现定义的多字符文本
C++11§2.14.3字符文字
字符文字是用单引号括起来的一个或多个字符,如在'x'
中,可以选择前面加字母L
,如在L'x'
中。不以L
开头的字符文字是普通字符文字,也称为窄字符文字包含单个c字符的teral具有类型char,其值等于执行字符集中c字符编码的数值。包含多个c字符的普通字符文字是多字符文字。多字符文字具有类型int
和实现定义的值。
必须在标签default:
default: // <==here must be a semicolon
}
或者干脆删除这个标签。如果使用标签,那么应该有一个return语句,因为函数的返回类型不是void
还有这些情况
case '10': return "Ten"; break;
case '11': return "Eleven"; break;
case '12': return "Twelve"; break;
case '13': return "Thirteen";
实现定义是因为包含超过1个字符的字符文本是实现定义的。我认为行为不像你想的那样
根据C++标准
包含多个c字符的普通字符文字是
多字符文字。多字符文字或普通文字
包含单个c字符的字符文本,在
执行字符集,受条件支持,的类型为int,并且
具有实现定义的值
至于与函数getSuit
相关的其他错误,那么函数声明在两个地方不同(我认为在类定义内部和定义时在类定义外部).您将错误归咎于此。错误C4430:假定缺少类型说明符-int。
是关键部分;后续错误是编译器试图理解已经不正确的代码。始终从顶部而不是底部读取错误消息;尤其是当它们引用相同或相邻的行时,以及按顺序排列
字符串类位于std::
命名空间中:
std::string getRank();
std::string getSuit();
std::string Card::getRank()
{
std::cout也在默认值上,您应该返回一个字符串或在那里执行一些操作。'10'
绝对不是您想要的。它是一个多字符常量,具有实现定义的值。您可能想要10
,而不是'10'
。如果编译器没有警告您,我会感到惊讶。错误消息参考rs到getSuit
,但您没有向我们展示任何定义、声明或引用getSuit
的代码。问题在于您没有向我们展示的某段代码。在案例13之后,您缺少了一个break
。您编辑的问题太多了……回答与您问题的最新形式不符ode>(int)'1'
,取决于输入,但字符和多字符literal是数字。噢,非常感谢,就是这样。我总是很难理解编译器错误,因为它们看起来非常模糊(我很糟糕)haha@user2063087:我在答案中添加了关于错误解释的进一步建议。
default: ;
}
case '10': return "Ten"; break;
case '11': return "Eleven"; break;
case '12': return "Twelve"; break;
case '13': return "Thirteen";
std::string getRank();
std::string getSuit();
std::string Card::getRank()
{
std::cout << "test";
}