首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

string的小疑点

2012-02-27 
string的小问题 stringsomefamousauthor()//这个函数函数返回值出错,string改成constchar*可以完成,这个有

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) 的说法。

热点排行