【问题标题】:error: expected unqualified-id before 'for'. compilation terminated due to -Wfatal-errors错误:'for' 之前的预期 unqualified-id。由于 -Wfatal-errors 导致编译终止
【发布时间】:2013-12-22 04:22:58
【问题描述】:

我不知道出了什么问题。正如我已经注释掉的那样,错误在第 7 行。非常感谢任何帮助。

错误:'for' 之前的预期不合格 ID。 由于 -Wfatal-errors 导致编译终止。

#include <iostream>
#include <map>
#include <math.h>

const char digit_ints[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'};
std::map<char,int> digit_map; 
for (int i = 0; i < 10; ++i) // ERROR ON THIS LINE!!!!!!!
    digit_map.insert(std::pair<char,int>(digit_ints[i], i));


int str2Int(const std::string& S) { 
    int sz = S.size();
    if (sz == 0) { 
        std::cout << "str2Int() cannot take an empty string as a parameter." << std::endl;
        return -1;
    } else { 
        int sum(0);
        for (int j(0), k(sz - 1); j < sz; --k, ++j) { 
            if ((S[j]) < 0 || (S[j]) > 9) { 
                std::cout << "str2Int can only take strings with chars '0' through '9' as parameters." << std::endl;
                return -1;
            } else { 
                sum += digit_map[S[j]] * pow(10, k);
            }
        }

    }
    return sum;
} 


int main() { 

    std::cout << str2Int("3421");

    return 0

}

【问题讨论】:

    标签: c++


    【解决方案1】:

    这个for 循环在函数之外做什么?

    for (int i = 0; i < 10; ++i) // ERROR ON THIS LINE!!!!!!!
        digit_map.insert(std::pair<char,int>(digit_ints[i], i));
    

    那肯定一个错误。它不包含在任何函数中。

    【讨论】:

    • 我应该如何将地图作为全局变量?我需要为我的 str2Int 函数使用映射,并且我不想在每次调用该函数时都实例化它。
    • 把for循环放在一个单独的函数里,比如Initialize()什么的。然后在需要的时候单独调用。
    • 语句,例如你的for 语句,不允许出现在函数体之外。在 C 中,您必须将循环放在一个函数中,然后显式调用它——或者,对于这样简单的事情,您可以将 for 循环移动到 main 的主体中。在 C++ 中,所有的 C 解决方案都可用,或者您可以将循环放入将自动调用的 constructor;为此,您需要定义一个类和该类类型的对象。
    猜你喜欢
    • 2014-01-14
    • 1970-01-01
    • 1970-01-01
    • 2011-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-07
    • 2011-01-15
    相关资源
    最近更新 更多