“expected primary-expression before ‘const’”错误

8

请帮忙,我得到了很多错误。

sub2.cpp:在函数‘int main()’中: sub2.cpp:11:14:错误:从 ‘const char*’ 到 ‘char’ 的无效转换 [-fpermissive] sub2.cpp:12:14:错误:从 ‘const char*’ 到 ‘char’ 的无效转换 [-fpermissive] sub2.cpp:16:17:错误:在‘const’之前需要主要表达式 sub2.cpp:16:36:错误:在‘const’之前需要主要表达式 sub2.cpp:11:6:警告:未使用变量‘outer’[-Wunused-variable] sub2.cpp:12:6:警告:未使用变量‘inner’[-Wunused-variable] make:* [sub2] 错误1

#include <iostream>
#include <string>
#include <cstring>

using namespace std;

char *Subtract(const char *outer, const char *inner);

int main()
{
    char outer = "Bookkepper";
char inner = "keep";

char *word = new char[50];

word = Subtract(const char &outer, const char &inner);

cout << word << endl;
return 0;
}


char *Subtract(const char *outer, const char *inner)
{
int olen = strlen(outer);
int first_occ_idx = -1;
for(int i=0; i < olen; i++){
    if(strncmp(outer+i, inner,strlen(inner)) == 0){
    first_occ_idx = i;
    }
}
if(first_occ_idx == -1){
    return NULL;
}
int ilen = strlen(inner);
int xx = olen - ilen;
char *newstr = new char[xx];
int idx = 0;
for(int i=0; i < first_occ_idx; i++){
    newstr[idx++] = outer[i];
}
for(int i=first_occ_idx+ilen; i < olen; i++){
    newstr[idx++] = outer[i];
}
newstr[idx] = '\0';
return newstr;
}
1个回答

5

在C++中,像"Bookkepper"(错误)这样的字符串字面值是const字符指针,比C语言更加严格。因此应该写成:

const char *outer = "Bookkeeper"; // Note also spelling

与其:

char outer = "Bookkepper";

此外,在调用函数时不需要包含类型,因此:
word = Subtract(const char &outer, const char &inner);

最好是:

word = Subtract(outer, inner);

这里有一些样式建议:表示大小的东西(例如字符串中的字符数)应该使用size_t而不是int

通常认为,显式清理所有动态内存是良好的编程习惯,因此在从main()返回之前,您可以加入以下代码:

delete[] word;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接