string的小问题
string somefamousauthor()//这个函数函数返回值出错,string 改成 const char * 可以完成,这个有什么道理?
{
switch(rand() % 3)
{
case 0:
return "margaret mitchell ";
case 1:
return "liu qing wu ";
case 2:
return "king ";
}
return " ";
}
int main(int argc, char* argv[])
{
string t = 0;//string 不能为零?什么
const char *p=somefamousauthor();
cout < <p;
}
[解决办法]
string t = 0;//string 不能为零?什么
-------------------------------------
因为t的类型string和0不兼容.
就像 int t = "150 "一样.
[解决办法]
string t = 0;
t是字符串类型,只能=字符串呀.
改成 string t= "0 "应该就可以了.
[解决办法]
有趣的,可以做制型
[解决办法]
类型都不一样,不能赋值
[解决办法]
不可以使用单个字符 ASCII码或其他整形数值来初始化一个string
一个string默认初始化为空,即
string a;
a== " ";
[解决办法]
看来楼上的办法很多啊。
[解决办法]
string类中有个_Ptr的私有变量类型为char*,因此string a=1;
相当于a._Ptr=1;整型常量不能直接赋值给字符串类型。
[解决办法]
string t = 0;//string 不能为零?什么
用 using namespace std;
另外 C C++中的string不同
C中的string就是字符数组
C++中的是类。
[解决办法]
C++中的string是stl中的string,它是一个template class.你看一下 <string> 这个头文件就会发现如下定义:
typedef basic_string <char> string;
也就是说,string类型的变量是一个class的对象.你能够写classA a = 0;么?不能.同样,string s=0;也是错的.但是string *ps = 0;就可以了.
同样的道理 somefamousauthor函数中return的是字符常量,它也不能转成string类型.你可以做如下修改:
std::string* somefamousauthor()
{
switch(rand() % 3)
{
case 0:
return new std::string( "margaret mitchell ");
case 1:
return new std::string( "liu qing wu ");
case 2:
return new std::string( "king ");
}
return new std::string( " ");
}
int _tmain(int argc, _TCHAR* argv[])
{
std::string *t = 0;
std::string *p=somefamousauthor();
std::cout < <*p;
delete p;
}
总之,string是一个class,不同于0结尾的字符数组.如果你要用unicode,应该使用wstring:
typedef basic_string <wchar_t> wstring;
[解决办法]
string t = 0;//string 不能为零?什么
0是一个整数,这里以一个整数来初始化一个string 对象,而string没有以一个整数为参数的构造函数,当然是不行的
[解决办法]
1、string t;string是一个类 不是int类型,也没有 string(int)的构造函数,所以会出错;
2、string类重载了 =
[解决办法]
首先 string somefamousauthor(); 函数本身没有问题,返回字符串时虽然类型为const char*,但是当实际返回值类型与声明时不同时,编译器会试图调用声明时类型的构造函数,也就是说这个函数返回时会调用string(char *)创建临时对象作为返回值。
关于你说的《string somefamousauthor()//这个函数函数返回值出错,string 改成 const char * 可以完成,这个有什么道理?》其实报错的地方在const char *p=somefamousauthor(); 因为string类型无法隐式转换为const char *p,但可以使用const char *p=somefamousauthor().c_str();转换。
第二个问题赞同Stevetan81(Steve) 的说法。