初始化构造函数时出现错误

Getting an error for initalisation of the constructor

本文关键字:错误 构造函数 初始化      更新时间:2023-10-16

这是我的流程。

#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,但不能反过来,如您的代码所示。