2013-08-22 89 views
0

我有一個問題,在XCode中沒有重新渲染(甚至沒有警告),但確實允許我在Keil MDK中編譯。KEIL錯誤:重載函數「std :: transform」沒有實例匹配參數列表

void grammar::parse(std::string &_expr) { 
    std::transform(_expr.begin(), _expr.end(), _expr.begin(), std::tolower); 
    _expr.erase(std::remove_if(_expr.begin(), _expr.end(), std::isspace), _expr.end()); 
} 

這就是我得到

錯誤:#304#304:沒有的功能模板「性病情況下,不重載函數實例 「的std ::變換」 錯誤匹配的參數列表: :的remove_if」相匹配的參數列表

頭包括:

#include <iostream> 
#include <sstream> 
#include <iomanip> 
#include <cmath> 
#include <stdlib.h> 
#include <math.h> 
#include <ctype.h> 
#include <stdio.h> 
#include <algorithm> 

能否請你告訴我在哪裏找?我很驚訝,XCode版本按預期工作...

回答

0

您包含ctype.h,該頭文件在全局名稱空間(這是C庫的一部分,因此沒有其他名稱空間)中聲明函數tolower。也許你打算包括cctype。對於給定的C標準庫頭文件X.h,有一個C++版本cX,它在::std名稱空間內提供了一些相同的功能。

+0

謝謝!我已將替換爲,但這並未改變錯誤。我應該使用命名空間標準;?可能導致錯誤? –

+0

@AnnaShkodenko:錯誤可能比真正發生的事情更混亂。如果這不能解決問題,那麼問題可能是(儘管錯誤消息不會真正說明),您還包括(很可能通過'iostream'和潛在的其他標準頭文件)間接'locale'頭文件。在這個頭文件中有一些'std :: tolower'的重載,編譯器可能無法確定哪一個是你想要使用的。如果是這種情況,你可以通過* casting *(真正選擇重載)來幫助它:'static_cast (std :: tolower)' –

相關問題