我的代码错误类型警告 1 警告 C4018 和更多错误

Posted

技术标签:

【中文标题】我的代码错误类型警告 1 警告 C4018 和更多错误【英文标题】:my code error type Warning 1 warning C4018 and more error 【发布时间】:2017-03-27 20:27:20 【问题描述】:

两个错误:

1:Warning 1 warning C4018: '<' : signed/unsigned mismatch

2:Error 2 error C3861: 'funcNewStr': identifier not found  

我该如何解决这个问题? 我很乐意为您提供帮助并解释我的错误在哪里,以便代码正常工作。 程序接收一个句子并从每个单词中取出第一个字母并组成一个新字符串。

#include <iostream> 
#include <string>


using namespace std;

int main()
int size = 50;
char* ptr = new char[size];
for(int i = 0; i < size; i++)
    ptr[i] = NULL;


cout << "Enter a string: " << endl;
string str;
getline(cin, str);

for (int i = 0; i<str.length(); i++)
    ptr[i] = str[i]; 

funcNewStr(ptr, size);

system("pause");
return 0;
 


char funcNewStr(char* ptr,int size)//my function
char* newStr = new char[size];
for (int i = 0; i < size; i++)
    newStr[i] = NULL;

newStr[0] = ptr[0];
int j = 1;
for (int i = 0; i < size; i++)
    if (ptr[i] == ' ')
        newStr[j] = ptr[i + 1];
        j++;
    


return *newStr;

谢谢。

【问题讨论】:

funcNewStr 在第一次使用后定义。移动上面的定义main str.length() 不能为负数。 int i可以。 在main之前声明funcNewStr;将 new 与 delete 配对。 实际上,你最好不要newing 或deleteing 任何东西。如果不允许,则使用 std::string。 【参考方案1】:

str.length()unsigned,因此您可以修复警告以替换它:

for (int i = 0; i<str.length(); i++)

通过

for (unsigned i = 0; i<str.length(); i++)

您可以在main之前添加函数funcNewStr的原型:

char funcNewStr(char* ptr,int size);

int main()
...

【讨论】:

【参考方案2】:

你需要在main()之前为你的函数添加原型 像这样:

char funcNewStr(char* ptr,int size);

int main()..

另外str.length() 是未签名的,因此您需要将i 声明为未签名。

还有一件事

using namespace std;

是不好的做法。这是link的解释。

【讨论】:

以上是关于我的代码错误类型警告 1 警告 C4018 和更多错误的主要内容,如果未能解决你的问题,请参考以下文章

如果C代码比较不同的数据类型,如何获得警告?

我的 php/mysqli 中出现错误和警告 [重复]

将警告视为错误无效

Typedef 警告和语法错误 LPINPUT

Visual Studio Code:禁用特定文件类型的错误/警告签入

XCode 错误/警告问题/如何对 XCode 缓存进行核对