2015-12-14 190 views
0

当我在Eclipse中编译我的代码时,它工作正常。但是如果我尝试用CMake进行编译,该过程将失败。它说:“不命名类型” - 使用CMake编译时发生错误

error: ‘default_random_engine’ does not name a type default_random_engine generator;

error: ‘uniform_int_distribution’ does not name a type uniform_int_distribution distribution;

和一些更多的错误,我相信这是这两个的后果。

class randomInt 
{ 
private: 
    int m_max; 
    default_random_engine generator; 
    uniform_int_distribution<int> distribution; 

public: 
    randomInt(int max = 0) : 
     m_max(max), 
     generator(time(0)), 
     distribution(0, m_max) 
    {} 

    int operator()() 
    { 
     return distribution(generator); 
    } 
}; 



int main(int argc, char **argv) 
{ 
    vector<int> vec(100); 
    generate(vec.begin(), vec.end(), randomInt(100)); 

    ostream_iterator<int> streamIt(cout, ",\n"); 
    copy(vec.begin(), vec.end(), streamIt); 

    return 0; 
} 

还有就是我的CMakeLists.txt

project(TEST) 

# States that CMake required version must be greater than 2.6 
cmake_minimum_required(VERSION 2.8) 

# Setup sources 
set(TEST_SOURCES 
     aufgabe2_1.cpp 
     aufgabe2_2.cpp 
     aufgabe2_3.cpp 
     aufgabe2_4.cpp) 

set(CMAKE_CXX_FLAGS_DEBUG "-g -Wall -std=c++11") 

# Build executable 
add_executable(main ${TEST_SOURCES}) 
+0

也许,Eclipse使用的编译器不同于Cmake。在这两种情况下,您都可以检查编译可执行文件的命令行。 – Tsyvarev

回答

0

这些都是从C++标准库的pseudo-random number generation符号,但是你还没有命名空间std合格的符号,所以使用std::default_random_enginestd::uniform_int_distribution