c++ - 带有构造函数的简单类引发警告: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("//");
我认为问题出在数据类型上。问题是什么?
解决方案
您不能按值传递数组。当你写:
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*
.
推荐阅读
- ios - 如何根据时间字段(自 1970 年午夜以来的秒数)获取日期?
- python-3.x - 使用 Twitter 提取地理位置的全名和国家代码
- sass - Gulp watch 只执行一次
- coq - 教堂数字
- html - CSS Grid auto-fit 和 min-max 留下空白
- javascript - 联系我们表单没有将所有填充字段发送到电子邮件,只有几个?PHP AJAX JS
- android - 如何在 Flutter 中创建一个按钮表并从中随机选择任何按钮?
- css - 带有 :before 和 :after 边框的 CSS 点
- c++ - 静态成员的方法
- angular - 从 Angular 4 中的普通集合重构代码以使用 rxjs 可观察对象