2015-12-14 58 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