繁体   English   中英

有符号/无符号不匹配,并且转换为函数时函数不带2个参数

[英]Signed/unsigned mismatch and function does not take 2 arguments when converting to function

因此,我能够编写一个程序,将字符串转换为摩尔斯电码,但老师希望我将其转换为函数中的转换部分,但是它给出了警告C4018的错误:'<':有符号/无符号不匹配n第29行和错误C2660:'toMorse':函数在第18行上没有2个参数,您会认为在能够正常运行程序之后,这会有些麻烦,但此时我的脑袋已经死了。 尽管我想我可以把所有的工作都放在main {}中,但对找出为什么这样做的任何帮助将不胜感激。

#include <iostream>
#include <string>
using namespace std;

// Function Prototypes
string toMorse(char);

int main()
{

    string userInput;

    cout << "Please input a string to convert to morse code." << endl;
    getline(cin, userInput, '\n');

    int stringSize = userInput.length();

    toMorse(userInput, stringSize);

}

//*****************************************************************
//Function to convert into morse code
//*****************************************************************
string toMorse(string morseArray, int stringSize)
{
    string *toConvert = new string[stringSize];

    for (size_t i = 0; i < stringSize; i += 1)
    {
        if (toupper(userInput.at(i)) == 'A')
        toConvert[i] = ".-";
    // will fill in the rest once problems are solved
        else toConvert[i] = " ";
    }

    for (size_t x = 0; x < stringSize; x += 1)
        cout << toConvert[x] << "  ";

    cout << endl;

    delete[] toConvert;

    return 0;
}

因此,我能够通过给出的提示使它正常工作,但是现在每次我运行以下代码(它正确翻译时,当我按Enter时,它都显示正确的输入,但同时显示“调试断言失败!表达式:无效的空指针在MSVCP120D.dll第1168行上

#include <iostream>
#include <string>
using namespace std;

// Function Prototypes
string toMorse(string, size_t);

int main()
{

    string userInput;

    cout << "Please input a string to convert to morse code." << endl;
    getline(cin, userInput, '\n');

    int stringSize = userInput.length();

    toMorse(userInput, stringSize);

}

//*****************************************************************
//Function to convert into morse code
//*****************************************************************
string toMorse(string morseArray, size_t stringSize)
{
    string *toConvert = new string[stringSize];

    for (size_t i = 0; i < stringSize; i += 1)
    {
        if (toupper(morseArray.at(i)) == ' ')
            toConvert[i] = " ";
        else if (toupper(morseArray.at(i)) == ',')
            toConvert[i] = "--..--";
        else if (toupper(morseArray.at(i)) == '.')
            toConvert[i] = ".-.-.-";
        else if (toupper(morseArray.at(i)) == '?')
            toConvert[i] = "..--..";
        else if (morseArray.at(i) == '0')
            toConvert[i] = "-----";
        else if (morseArray.at(i) == '1')
            toConvert[i] = ".----";
        else if (morseArray.at(i) == '2')
            toConvert[i] = "..---";
        else if (morseArray.at(i) == '3')
            toConvert[i] = "...--";
        else if (morseArray.at(i) == '4')
            toConvert[i] = "....-";
        else if (morseArray.at(i) == '5')
            toConvert[i] = ".....";
        else if (morseArray.at(i) == '6')
            toConvert[i] = "-....";
        else if (morseArray.at(i) == '7')
            toConvert[i] = "--...";
        else if (morseArray.at(i) == '8')
            toConvert[i] = "---..";
        else if (morseArray.at(i) == '9')
            toConvert[i] = "----.";
        else if (toupper(morseArray.at(i)) == 'A')
            toConvert[i] = ".-";
        else if (toupper(morseArray.at(i)) == 'B')
            toConvert[i] = "-...";
        else if (toupper(morseArray.at(i)) == 'C')
            toConvert[i] = "-.-.";
        else if (toupper(morseArray.at(i)) == 'D')
            toConvert[i] = "-..";
        else if (toupper(morseArray.at(i)) == 'E')
            toConvert[i] = ".";
        else if (toupper(morseArray.at(i)) == 'F')
            toConvert[i] = "..-.";
        else if (toupper(morseArray.at(i)) == 'G')
            toConvert[i] = "--.";
        else if (toupper(morseArray.at(i)) == 'H')
            toConvert[i] = "....";
        else if (toupper(morseArray.at(i)) == 'I')
            toConvert[i] = "..";
        else if (toupper(morseArray.at(i)) == 'J')
            toConvert[i] = ".---";
        else if (toupper(morseArray.at(i)) == 'K')
            toConvert[i] = "-.-";
        else if (toupper(morseArray.at(i)) == 'L')
            toConvert[i] = ".-..";
        else if (toupper(morseArray.at(i)) == 'M')
            toConvert[i] = "--";
        else if (toupper(morseArray.at(i)) == 'N')
            toConvert[i] = "-.";
        else if (toupper(morseArray.at(i)) == 'O')
            toConvert[i] = "---";
        else if (toupper(morseArray.at(i)) == 'P')
            toConvert[i] = ".--.";
        else if (toupper(morseArray.at(i)) == 'Q')
            toConvert[i] = "--.-";
        else if (toupper(morseArray.at(i)) == 'R')
            toConvert[i] = ".-.";
        else if (toupper(morseArray.at(i)) == 'S')
            toConvert[i] = "...";
        else if (toupper(morseArray.at(i)) == 'T')
            toConvert[i] = "-";
        else if (toupper(morseArray.at(i)) == 'U')
            toConvert[i] = "..-";
        else if (toupper(morseArray.at(i)) == 'V')
            toConvert[i] = "...-";
        else if (toupper(morseArray.at(i)) == 'W')
            toConvert[i] = ".--";
        else if (toupper(morseArray.at(i)) == 'X')
            toConvert[i] = "-..-";
        else if (toupper(morseArray.at(i)) == 'Y')
            toConvert[i] = "-.--";
        else if (toupper(morseArray.at(i)) == 'Z')
            toConvert[i] = "--..";
        else toConvert[i] = " ";
    }

    for (size_t x = 0; x < stringSize; x += 1)
        cout << toConvert[x] << "  ";

    cout << endl;

    delete[] toConvert;

    return 0;
}

非常感谢。 通过将其更改为适当的返回类型,我能够使其运行无错误。 再次感谢。 并感谢大家的帮助!

C4018警告是关于比较。 您可以使用如下函数原型:

string toMorse(string morseArray, size_t stringSize);

另外,您已经将toMorse函数定义为string toMorse(char); 在文件的开头,这与下面的内容有所不同。

另一个错误行userInput应该在if (toupper(userInput.at(i)) == 'A')morseArray

另外,为什么要用size_t i = 0而不是int i = 0初始化for循环?

在更新的版本中, toMorse函数定义为将string作为返回类型。

但是你写了return 0; 这使用0作为参数构造一个字符串,该字符串被视为空指针。 (这是C的宿醉)。 这将导致未定义的行为,其本身表现为“调试断言失败”。 带有指针的string的构造函数希望它是指向某些字符的指针。

要解决此问题,请将函数更改为返回void ,或者返回有效的字符串。 函数名称建议应返回摩尔斯电码字符串,而不是将其发送给cout

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM