Closed. This question is not reproducible or was caused by typos 。它目前不接受答案。












想改善这个问题吗?更新问题,使其成为 Stack Overflow 的 on-topic

5年前关闭。



Improve this question




我看过很多这些,但似乎没有一个与我的问题相对应。这个程序在本地运行良好,但在它需要运行的服务器上我遇到了错误。

project1.cpp:在函数‘void insertwords(char*)’中:
project1.cpp:54:65: 错误: 'transform' 未在此范围内声明
变换(word.begin(),word.end(),word.begin(),::tolower);

相关代码:
void insertwords(char *filename) {
    ifstream fin;
    fin.open(filename);
        if(fin.fail())
            {
            cerr << "File opening failed. Exiting program.\n";
            exit (-1);
            }
    string word;
    int count = 0;
    while (!fin.eof() ) {
        word.clear();
        fin >> word;
        transform(word.begin(), word.end(), word.begin(), ::tolower);
        for (int i = 0, len = word.size(); i < len; i++)
        {
            if(ispunct(word[i]))
            word.erase(i--, 1);
            len = word.size();
        }
        if(!word.empty()) {
            insert_word(word);
            ++count;
                }
        }


    cout << "The number of words found in the file was " << count << "\n";
    fin.close();
}

包括:
#include <iostream>
#include <string>
#include <fstream>
#include <cctype>
#include <locale>

using namespace std;

我知道使用命名空间 std;是不好的做法,但我被告知要为该项目

最佳答案

您需要 #include <algorithm> 这是 std::transform 来自的 header 。

至于为什么它会在一台机器上编译而不是在另一台机器上编译,我的猜测是您的其他头文件之一(例如 <string> )在其中一个编译器实现中包含 <algorithm> 所以您很幸运,但对于其他编译器则不然。

关于未在作用域中声明的 C++ 转换仅发生在服务器上,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32408521/

10-13 06:44