初始化构造函数时出现错误
Getting an error for initalisation of the constructor
这是我的流程。
#include<iostream>
#include "process.h"
#include "CString.h"
void process(const char* s){
w1::Cstring cs(s);
std::cout << cs;
}
我CString.h
#ifndef _CSTRING_H
#define _CSTRING_H
#include<iostream>
namespace w1{
const int CHAR_NUM=3;
class Cstring{
public:
char str[CHAR_NUM+1];
Cstring(char* s);
void display(std::ostream& os) const;
};
std::ostream& operator<<(std::ostream&os ,const Cstring& cs);
}
#endif
这是cstring。cpp
#include <iostream>
#include "CString.h"
namespace w1{
Cstring::Cstring(char* s){
if (s==' '){
str[0]=' ';
}else{
for (int i=0;i<CHAR_NUM;i++){
str[i]=s[i];
str[i+1]=' ';
}
}
}
void Cstring::display(std::ostream& os) const{
os<<str<<std::endl;
}
std::ostream& operator<<(std::ostream&os ,const Cstring& cs){
cs.display(os);
return os;
}
}
我得到一个错误,说我没有任何匹配的构造函数初始化w1::CString在process.cpp我不知道如何改正
您将构造函数Cstring(char* s);
写为接受非const指针。但是你的函数void process(const char* s)
试图传递给它一个const指针。编译器不会自动抛弃constness(这是有充分理由的)。
然而,由于构造函数似乎没有修改其形参,您应该将其更改为const指针:
Cstring(const char* s);
这样错误就解决了
我建议将构造函数的参数类型更改为const char *
,如果构造函数不修改参数,如在您的代码中。编译器可以隐式地将非const
转换为const
,但不能反过来,如您的代码所示。
相关文章:
- "error: no matching function for call to"构造函数错误
- 为什么类中的ostringstream类型的成员会导致";调用隐含删除复制构造函数";错误
- 模板,函数使用错误的构造函数来复制我的对象
- C++ OpenCV 卡尔曼滤波器构造函数错误
- 不命名构造函数和析构函数上的类型错误
- 处理简单 cpp 类构造函数中的错误
- 类和构造函数中的函数根本不起作用,并且不返回任何错误
- 链接器错误:无法解析构造函数
- 当我尝试通过构造函数分配 char 数组时出现错误
- 没有参数的构造函数给我错误
- 使用复制构造函数的程序输出错误
- 默认构造函数上的分段错误
- 错误: 无效使用非静态数据成员"应用程序::应用程序构造函数"
- 为什么定义复制构造函数会给我错误:无法将类型 'obj&' 的非常量左值引用绑定到类型为"obj"的右值?
- 带有 QWidget 的分段错误构造函数.Qt/C++
- C++错误构造函数参数
- 错误:构造函数未命名类型
- 错误:构造函数在此上下文中受到保护
- 没有匹配的函数错误C++构造函数
- 错误:构造函数的多个定义