C ++中的字符串数组无法正常工作?

时间:2010-02-27 17:56:53

标签: c++ arrays string

我正在研究一个程序,它接受一个从0到9999的数字,并吐出单词值(即13将吐出“十三”等)而且我很痛苦阵列由于某种原因。

到目前为止,这是班级:

#include<iostream>
#include<string>

using namespace std;

class Numbers
{
    private:

        int number;

        string lessThan20[ ] = {"zero", "one", "two", "three", "four", "five", 
            "six", "seven", "eight", "nine", "ten", "eleven", "twelve", "thirteen", 
            "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen"};
        string incrementsOfTen[ ] = {"twenty", "thirty", "fourty", "fifty", "sixty",
            "seventy", "eighty", "ninety"};
        string hundred = "hundred";
        string thousand = "thousand";

    public:
        Numbers(int newNumber)
        {
            setNumber(newNumber);
        }

        void setNumber(int newNumber)
        {
            if(newNumber < 0 || newNumber > 9999)
            {
                cout << "Number cannot be negative or larger than 9999, defaulted to zero." << endl;
                number = 0;
            }
            else
            {
                number = newNumber;
            }
        }

        int getNumber()
        {
            return number;
        }
};

我的问题出现在两个字符串数组中,我从编译器中得到了这些错误:

1>f:\college work\csis 297\assignment 4\chapter 11-1\chapter 11-1\11-1.cpp(19) : error C2059: syntax error : '{'
1>f:\college work\csis 297\assignment 4\chapter 11-1\chapter 11-1\11-1.cpp(19) : error C2334: unexpected token(s) preceding '{'; skipping apparent function body
1>f:\college work\csis 297\assignment 4\chapter 11-1\chapter 11-1\11-1.cpp(22) : error C2059: syntax error : '{'
1>f:\college work\csis 297\assignment 4\chapter 11-1\chapter 11-1\11-1.cpp(22) : error C2334: unexpected token(s) preceding '{'; skipping apparent function body
1>f:\college work\csis 297\assignment 4\chapter 11-1\chapter 11-1\11-1.cpp(24) : error C2864: 'Numbers::hundred' : only static const integral data members can be initialized within a class
1>f:\college work\csis 297\assignment 4\chapter 11-1\chapter 11-1\11-1.cpp(25) : error C2864: 'Numbers::thousand' : only static const integral data members can be initialized within a class

我敢肯定,如果我花更多的时间在单个变量字符串上我可以解决这些问题,但我花了一个小时的时间来查看我在两个数组上做错了什么,任何建议或者信息将不胜感激。

提前致谢。

PS:不,没有主要的,还没有到达那里,我的程序现在有一个空白的主要因为我现在只是试图让类编译错误。

编辑澄清:

前两个错误在第一个数组上,第二个错误在第二个数组上,最后两个错误在非数组字符串上。

2 个答案:

答案 0 :(得分:5)

错误消息说明了一切:

  

只能在类

中初始化静态const积分数据成员

你不能做你想要的,你必须分离声明和初始化,并将初始化移动到构造函数,或使用static const,并将初始化放在类之外。这是首选,因为值实际上不会更改,或取决于实例:

class Numbers
{
    private:
        static const string lessThan20[];
        // …
};

string const Numbers::lessThan20[ ] = {"zero", "one", "two", "three", "four", "five", 
            "six", "seven", "eight", "nine", "ten", "eleven", "twelve", "thirteen", 
            "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen"};

类似于其他阵列。

答案 1 :(得分:1)

我会让你的数组成为const char*的数组。然后使用std::string构建结果字符串。 C ++字符串类几乎每个操作都接受char *。

"this is a string" 这样的字符串文字是 a const char*。没有必要把它变成一个字符串。

哦,是的,正如另一个答案所说,你必须在类定义之外定义数组的值。