在 C++ 中使用 char* 进行初始化
delcaring an object and initializing using a char* in c++
我是 c++ 初学者,编译以下代码时遇到问题问题出在语句T a = s
其中s
是包含abcde
的char*
。
这里的目标是声明一个 T
的对象并使用 s
初始化它。
我在这条线上也有麻烦for(int i = 0; i < a(); i++)
.
我不知道如何使用构造函数或名为 a()
的函数来返回大小。
这是我的代码:
#include <iostream>
#include <cassert>
using namespace std;
class T{
int nb ;
char *pc;
public:
T(int);
~T();
T(T&);
char& operator[](int);
T(const char* s){
int n ;
for(int i = 0 ; s[i] != ' ' ;i++ ) n++ ;
nb = n ;
pc= new char[nb];
for(int i=0 ; i < nb ; i++) pc[i] = s[i];
}
};
T::T(int k){
assert(k > 0);
nb = k;
pc = new char[nb];
}
T ::~T(){
if( pc != NULL) delete [] pc;
}
T::T(T& t){
nb=t.nb;
delete[] pc;
pc = new char[nb];
for(int i=0 ; i < nb ; i++) pc[i] = t.pc[i];
}
char& T::operator[](int index){
assert(index >=0 && index <= nb);
return pc[index];
}
int main(){
char* s = "abcde";
T a = s;
for(int i = 0; i < a(); i++)
cout << a[i] << " ";
cout << endl;
T b = a;
b[1] = '*';
b[3] = '*';
for(int i = 0; i < b(); i++)
cout << b[i] << " ";
cout << endl;
return 0;
}
我收到以下错误:
从类型"T"的右值初始化类型"T&"的非常量引用无效|
您在定义对象时误解了"赋值"。
像定义对象一样定义对象时
T a = s;
它不是一个赋值,它是一个对象构造,你需要一个构造函数来接受一个const char*
参数。
另一方面,如果你这样做
T a;
a = s;
然后这是一个作业。当然,这取决于T
具有默认构造函数(不接受任何参数的构造函数(。
您现在得到的错误是因为您需要一个通过常量引用获取其参数的复制构造函数。定义
T a = s;
实际上等于
T a = T(s);
T(s)
创建一个临时对象,一旦 a 的完全初始化完成,该对象将被销毁。并且非常量引用不能绑定到临时对象,因此您的复制构造函数需要接受const T&
参数。
初始化
不使用运算符=。它改用构造函数,尽管 = 符号语法。所以你需要有带有签名 T::T(char*( 的构造函数。顺便说一下,我强烈建议将其设为 const char*,以避免编译器对你大喊大叫,因为它分配了字符串文字。
相关文章:
- 使用指针初始化 char 数组或字符串 C++
- 需要帮助在 c++ 中将字符串转换为字符 ----错误 "const char *" 类型的值不能用于初始化 "char" 类型的实体
- c ++ 如何在构造函数中初始化 char
- 用字节初始化 char* 和 std::字符串
- C++:无法使用条件类型在模板函数中使用 'double' 类型的 lvalue 初始化 'char*' 类型的参数
- 初始化char数组和具有整数文字的char时的差异
- 使用表达式初始化char*无效
- 在类构造函数中初始化 Char 数组成员C++
- 在C 中的构造函数的初始化列表中初始化char数组
- 在C 中,这是用字符串文字初始化char数组的好习惯
- 值类型 const char 不能用于初始化 char* 类型的实体
- 如何初始化 char*[] 数组
- char的值不能用于初始化char*的实体
- 如何在c中重新初始化char*变量
- 如何在c++类中初始化char*?(sizeof()总是给出8)
- 通过传递的指针段错误初始化 char 数组
- 如何在构造函数中初始化 char 数组
- 初始化char数组以容纳非null终止的字符串
- char*类型的值不能用于初始化“char”类型的实体
- 用c++中的字符串初始化char Buffer