2013-07-07 43 views
-5

我的目标是创建一个返回的第i个元素的方法(从零开始,就像阵列),它被称为对String的。如果要求的位置超出字符串范围,此方法应打印出错误消息并返回空字符(\ 0)。憋屈的执行情况string类

char String::element(int i) const 
{ 
    if (i < m_str1) 
    { 
     cout << s[i]; // also the s here is undefined 
    } 
    else 
    { 
     cout << "Error" << endl; 
    } 
    return (0); 
} 

所以我只是想知道这是正常的,或者我需要增加更多的,我怎么能解决这个不确定的变量?

+1

那么,有什么问题吗? – Borgleader

+0

传统上,该参数的类型应该是'的std :: size_t'。 – chris

+2

这是什么? – phoeagon

回答

1

为了使其正常工作,您需要将s更改为指向字符数组的成员变量。你没有提供的String类定义,所以很难说什么是成员变量的名字。

你也应该改变

char String::element(int i) const 

要么

char String::element(size_t i) const 

char String::element(unsigned int i) const 

这是因为你的字符数组不应该用负索引值来访问。如果你不改变i无符号价值,你需要确保它是等于或大于零,这不应该被允许反正。玩具也应该改变m_str1size_tunsigned int如果它已经不是因为字符串不应该具有负的长度。

应用这些建议将使Stringelement()看起来像下面这样...

class String 
{ 
    unsigned int m_str1; // length of character string 
    char* m_str; // pointer to the character string 
public: 
    char String::element(unsigned int i) const; 
}; 

char String::element(unsigned int i) const 
{ 
    if (i < m_str1) 
    { 
     return m_str[i]; // Changed s to m_str 
    } 

    cout << "Error" << endl; 
    return 0; 
} 
+0

即使在改变 char String :: element(int i)const to char String :: element(unsigned int i)const 仍然将我标记为错误 – user2557401

+0

确切地说你会得到什么错误?在你的问题's'是未定义的,但'我'不会产生错误,所以'我'_still_怎么会给你一个错误? –

+0

以及s的第一有一个未定义的错误(没有定义的变量),但后更改的“返回m_str1 [I];那么我有一个错误是表达式必须有指向对象类型的指针 – user2557401