C ++直接调用向量元素的函数(Eclipse CDT bug?)

时间:2014-03-15 05:22:26

标签: c++ eclipse eclipse-cdt

尝试调用vector元素函数时,我遇到了一个奇怪的错误。例如,如果我这样做

error

但是,如果我这样做,它的工作正常:

no error

代码在Visual Studio中运行良好,这是Eclipse CDT的错误吗?

P.S。忽略endl bug

编辑: 来自Visual C ++的编译器错误

C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\Include\vector(1494) : error C2528: '_Ptr' : pointer to reference is illegal
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\Include\vector(1658) : error C2528: '_Pval' : pointer to reference is illegal

MinGW的编译器错误

c:\mingw\lib\gcc\mingw32\4.8.1\include\c++\bits\stl_vector.h:87:68: error: using invalid field 'std::_Vector_base<_Tp, _Alloc>::_Vector_impl::_M_finish'
c:\mingw\lib\gcc\mingw32\4.8.1\include\c++\bits\stl_vector.h:87:68: error: using invalid field 'std::_Vector_base<_Tp, _Alloc>::_Vector_impl::_M_end_of_storage'

请注意,它在Visual Studio中编译良好

编辑2:

好的......现在它的工作原因有些道理。是的,我选择back()方法作为示例是错误的,因为我尝试的任何方法都失败了。但出于某种原因,经过几天的这个问题,Eclipse修复了自己,现在我从这段代码中得到的唯一错误信息是

..\src\main.cpp:48:21: error: 'class std::basic_string<char>' has no member named 'back'

如果问题回来,我不会感到惊讶,但我想这对Eclipse来说确实是一个问题,无论是IDE本身还是我的环境/链接器设置

1 个答案:

答案 0 :(得分:2)

std::basic_string::back似乎是C ++ 11中的新功能。因此,除非您在C ++ 11模式下编译(例如,对于gcc使用-std=c++11),否则它不会编译。这是我使用的完整测试代码:

#include <iostream>
#include <string>
#include <vector>

int main() {
    std::vector<std::string> strings;
    strings.push_back("test");
    std::cout << strings[0].back() << '\n';
}

因此,您还必须将Eclipse配置为使用C ++ 11模式。