使用“长度”的头文件的 For 循环中出现错误 C867 [重复]

Posted

技术标签:

【中文标题】使用“长度”的头文件的 For 循环中出现错误 C867 [重复]【英文标题】:Error C867 Within Header File's For Loop using "Length" [duplicate] 【发布时间】:2017-08-10 22:16:22 【问题描述】:

我正在制作一个转换罗马数字并将它们转换为十进制值的程序。我有一个头文件,不断给我以下错误:

错误 C3867 'std::basic_string,std::allocator>::length':非标准语法;使用 '&' 创建一个指向成员 RomanChar 的指针

其中“RomanChar 是 Visual Studio 中项目的名称。此错误发生在我创建的 for 循环中,原因是“.length”部分。

我已尝试查找此问题的解决方案,但问题通常涉及为成员添加括号或使用我无法理解的名为 gcroot 的东西。

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

class RomanClass  //Define class "RomanClass"
public:


    void setValue(int x) 
        Value = x;
    

    int getValue() 
        return Value;
    

    void setValue(string s) 

        for (int i = int(s.length) - 1; i >= 0; i--) 

            if (s[i] == 'M' || 'm') 
                Value += 1000;
            

            else if (s[i] == 'D' || 'd') 
                Value += 500;
            

            else if (s[i] == 'C' || 'c') 
                Value += 100;
            

            else if (s[i] == 'L' || 'l') 
                Value += 50;
            

            else if (s[i] == 'X' || 'x') 
                Value += 10;
            

            else if (s[i] == 'V' || 'v') 
                Value += 5;
            

            else if (s[i] == 'I' || 'i') 
                Value += 1;

        


    



private:

   int Value = 0;
;

【问题讨论】:

【参考方案1】:

s.length 应该是 s.length()。长度是一个成员函数。

【讨论】:

以上是关于使用“长度”的头文件的 For 循环中出现错误 C867 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

“for”循环出现问题 - 关于长度的警告消息

c语言运用sort 排序函数,需要的头文件是啥?

PHP for循环中怎么让字符串超过固定特定长度后自动换行?

如何在Linux上使用相关的头文件编译这个C ++代码?

如何找到for循环中数组的长度

如何在批处理文件中的for循环中使用可变长度的子字符串?