Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Type 'std::default_random_engine' could not be resolved

Tags:

c++

c++11

eclipse

I want to generate some random double numbers using default_random_engine and uniform_real_distribution in header random.

I use Eclipse for C/C++ & MinGW to build my project.

  • Eclipse version: 4.2.1
  • Eclipse CDT C/C++ Development Tools version: 8.1.1.201209170703
  • Eclipse CDT GCC Cross Compiler Support version: 1.1.0.201209170703
  • MinGW version: 4.6.2(checked using "gcc -v")

When I type std::default_random_engine in the editor, Eclipse prompts me that "Type 'std::default_random_engine' could not be resolved".

I have already configured my project to support C++11 features

  • Open Project Properties->C/C++ Build ->Settings->Tool Settings->GCC C++ Compiler->Miscellaneous->Other Flags. Put "-std=c++0x" at the end
  • Project Properties->C/C++ General->Preprocessor Include Paths, Macros->[Providers] tab->your Built-in Compiler Settings provider (toolchain dependent). Click on "Workspace Settings" link which gets you to "Settings" property page, select [Discovery] tab and your provider again. There is "Command to get compiler specs", add "-std=c++0x" in there.

Then I wrote a list initialized vector and a range for to test the support of the C++11, the code work fine.

    vector<int> ivec = {1, 2, 3};
    for (int i : ivec)
        cout << i << " ";
    cout << endl;

What's wrong with the "std::default_random_engine", what should I do to fix this?

like image 705
zyy7259 Avatar asked Oct 29 '12 05:10

zyy7259


1 Answers

UPDATE: It's been a long time since I posted the original answer and it has become outdated. I double-checked today (Mar 15, 2014): in Eclipse Kepler (Build id 20130614-0229) it is sufficient to

  • add under Project > Properties > C/C++ Build > Settings then on the Tool Settings tab GCC C++ Compiler > Miscellaneous the -std=c++11 flag,

  • then under Window > Preferences > C/C++ > Build > Settings on the Discovery tab chose CDT GCC Built-in Compiler Settings and add the -std=c++11 flag to Command to get compiler specs. On my machine it looks like this after the change:

    ${COMMAND} -E -P -v -dD -std=c++11 "${INPUTS}"

  • clean and rebuild both your project and your index (Project > C/C++ Index > Rebuild) as Eclipse tends to cache error messages and show them even though they are gone after changing the settings.

This works on my machine for sure. If it doesn't on yours, then you might want to give a shot to this: C++11 full support on Eclipse although I am neither sure about the correctness of this approach nor was it necessary to do it on my machine. As of March 7, 2014 users claim that it helped them whereas the above approach didn't.


The original post, now outdated:

It seems to be a false error from the IDE.

Click on the project properties, then C/C++ General > Code Analysis > Syntax and Semantic Errors and deselect Type cannot be resolved.

I also had to disable a bunch of other Syntax and Semantic Errors, such as Invalid arguments, Invalid overload, Symbol is not resolved, etc. in my own projects. These bogus errors come from Codan.

(You might have to add __GXX_EXPERIMENTAL_CXX0X__ to your defines / preprocessor macros, not sure about this one though.)

like image 84
Ali Avatar answered Oct 12 '22 13:10

Ali