这是我的process.cpp
#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=='\0'){
str[0]='\0';
}else{
for (int i=0;i<CHAR_NUM;i++){
str[i]=s[i];
str[i+1]='\0';
}
}
}
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;
}
}
我收到一条错误,说我在process.cpp中没有任何匹配的构造函数来初始化w1 :: CString 我不知道如何纠正它。
答案 0 :(得分:4)
您将构造函数Cstring(char* s);
编写为非const指针。但是你的函数void process(const char* s)
试图传递一个const指针。编译器不会自动抛弃constness(并且有充分的理由)。
但是,由于该构造函数似乎没有修改其参数,您应该将其更改为const指针:
Cstring(const char* s);
因此该错误将得到解决。
答案 1 :(得分:1)
我建议将构造函数的参数类型更改为const char *
,如果构造函数不修改参数,就像在代码中一样。允许编译器将非const
隐式转换为const
,但不能反过来,如代码所示。