首页 > 解决方案 > 带有构造函数的简单类引发警告:ISO C++ 禁止将字符串常量转换为 'char*'

问题描述

所以我正在构建一个 Regex 类,带有一个简单的构造函数:

正则表达式.hpp

#ifndef REGEX_CUSTOM_CLASS
#define REGEX_CUSTOM_CLASS

#include <stdio.h>

using namespace std;

class Regex
{
private:
    /* data */
public:
    char *regex;

    Regex(char str[]);
};

#endif  // REGEX_CUSTOM_CLASS

正则表达式.cpp

#include <iostream>
#include <list>
#include <assert.h>
#include <ctype.h>
#include <stdio.h>

#include "regex.hpp"

using namespace std;


Regex::Regex(char str[])
{
    regex = str;
}

工具.cpp

#include <iostream>
#include <stdio.h>

#include "lib/regex/regex.cpp"

using namespace std;

int main() {
    Regex my_regex("//");

    cout << my_regex.regex << endl;

    return 0;
}

但是在我将它编译为 .exe 文件并运行它之后,我收到了以下错误消息: warning: ISO C++ forbids converting a string constant to 'char*' Regex my_regex("//");

我认为问题出在数据类型上。问题是什么?

标签: c++classconstructor

解决方案


您不能按值传递数组。当你写:

Regex::Regex(char str[])

这实际上是

Regex::Regex(char* str)

此外,字符串文字是类型const char [N](其中N是字符串的长度,包括空终止符),并且当传递给函数时,它们会衰减为const char*. char*从 a const char*(指向常量的指针char,不要与指向的常量指针混淆)获取 achar会破坏 const 的正确性。

用作std::string参数类型或将其更改为const char*.


推荐阅读