好的,我在我看来制作了一个非常大的文件,所以我想将它分成几个文件以获得更清晰的代码。所以我有我的主.cpp文件和两个持有我的类的头文件。好吧头文件没有字符串,它很容易不会让步。我在我的.cpp文件中调用库,甚至在我的头文件中尝试过。
我遇到的另一个问题是使用字符串来使开关起作用,原因是如果我在开关中使用整数,如果用户输入一个字母字符,程序进入无限循环。
string choice;
switch (choice)
{
case "1" :
//...
break;
case "2" :
//...
break;
}
我最后一个问题是当我在一个错误的情况下创建一个对象时。说对象的交叉初始化。
string choice;
switch (choice)
{
case "1" :
Class object;
break;
case "2" :
//...
break;
}
以下是我遇到的标题问题。 ///main.cpp////
#include <iostream>
#include <string>
#include "customer.h"
//// customer.h ////
class Customer
{
string name;
string meal;
// method
public:
int Choose_cCustomer()
{
int a;
a = rand () % (10 - 1 + 1) + 1;
return a;
};
编译器代码:'string'没有命名类型;
答案 0 :(得分:7)
“string”未命名类型
在头文件的顶部添加#include <string>
,因为它在头文件中使用,必须先包含它。由于string
在std
命名空间中定义,因此您应该使用std::string name;
声明它。
在cpp文件中,您可以使用using namespace std;
快捷方式,但最佳做法是始终引用限定名称(“限定名称”包括命名空间 - 例如std::string
或{{ 1}})。
我做不到
std::vector
这是正确的,开关是为“整数值”保留的。或者可以视为整数的值(例如字符)。见(http://www.cprogramming.com/tutorial/lesson5.html)
我做不到
switch(string)
这是正确的。 case 1: Class object;
不能直接在其中声明变量。但是,有一个快速的解决方法:
case
如果确实想要比较字符串,则应链接case 1: { // Notice the added braces, to create a 'scope' for which to define object.
Class object;
// ... use object as normal ...
break;
}
语句。
答案 1 :(得分:0)
不,你做不到 - 所以不要这样做 - 改用if-ladder。交换机只能在整数类型上执行,并且即使在那时也经常被过度使用,恕我直言。
您的第三个问题是因为案例没有创建范围:
#include <string>
using namespace std;
int main() {
int n = 0;
switch( n ) {
case 0:
string s1;
case 1:
string s2;
}
}
如果n的值为1,则跳过s2的创建,这在C ++中是非法的。您需要自己设置范围:
int main() {
int n = 0;
switch( n ) {
case 0: {
string s1;
}
case 1: {
string s2;
}
}
}
但我应该说,我认为任何包含多个陈述,加上可能是休息的情况都是不好的做法。
答案 2 :(得分:0)
switch
语句仅适用于整数值。积分值包括char
但排除指针,"1"
等文字的类型为const char *
。
相反,请使用'1'
等。 '1'
是int
,其中包含字符值“1”。单引号,而不是双引号。
为了做到这一点,您必须启用choice[0]
而不是choice
,因为您必须获得char
。
答案 3 :(得分:0)
关于编译器错误,您需要放行
#include <string>
在customer.h中。在包含customer.h之前将它放在main.cpp中只能在编译main.cpp时工作,即便如此,只有提供的customer.h不会被前面的头部间接包含。编译customer.cpp时,它将失败。
修改强>
正如@Mike Seymour指出你需要在任何地方使用std::string
或在包含字符串标题后添加使用声明using std::string
。我得到了你的代码工作的印象,直到你把它分成不同的文件,所以我假设你已经在main.cpp中进一步使用了使用声明。