2017-04-03 18 views
0

CMakeの: 'sqrtf' が 'STD' のメンバではありません

$ cmake . 
$ make 

で私のプログラムをコンパイルした後、私はこのフォームの5つのエラーを取得:

$ make 
Scanning dependencies of target Project 
[ 50%] Building CXX object CMakeFiles/myproj.dir/main.cpp.o 
In file included from /path/to/my/proj/main.cpp:2:0: 
/path/to/my/proj/library.hpp: In member function ‘virtual double MyProjClass::get_value(double, double) const’: 
/path/to/my/proj/library.hpp:419:26: error: ‘sqrtf’ is not a member of ‘std’ 
    const float F = (std::sqrtf(1.0f + 2.0f) - 1.0f)/2; 
        ^

他のエラーがfloorfがされていない含めます会員はstdです。

this threadを見ると、私はC++ 11でコンパイルしていないので、this threadスレッドを見て "[...] CMakeはC++コンパイラが適切なコマンドラインフラグで呼び出されることを確認します。

私のCMakeは明らかにこれをしていません。なぜこれらのエラーが出るのですか?そしてそれらを修正するにはどうしたらいいですか?

編集:ここに私のCMakeLists.txtは

cmake_minimum_required(VERSION 3.5) 
project(Noise) 

set(CMAKE_CXX_STANDARD 11) 

set(SOURCE_FILES main.cpp vector.hpp noise.hpp) 
add_executable(Noise ${SOURCE_FILES}) 

find_package(SDL2 REQUIRED) 
include_directories(${SDL2_INCLUDE_DIRS}) 
target_link_libraries(Noise ${SDL2_LIBRARIES}) 
+0

問題は、あなたの 'CMakeLists.txt'ファイルまたはC++コードのいずれかにあります。あなたはどちらも示していないので、私たちは手伝ってはいけません。 – Angew

+1

'sqrtf'または' floorf'を使う理由は?特にC++ 11の場合、 'sqrt'は' float'を直接扱うことができます。 – oLen

+0

@Angew Added CMakeLists.txt oLen:あなたのコメントはこれを解決しました。 floorfとsqrtfのすべてのインスタンスをfloorとsqrtに置き換えると、エラーが取り除かれました。理由は分かりません。 – Mossmyr

答えて

0

あなたが使用したが7、sqrtffloorfstd名前空間内ではないけれども、それはG ++ 5.xのであると仮定されているものをC++コンパイラで言っていません-std=c++11,-std=c++14または-std=c++1zcmathが含まれている場合は、グローバル名前空間にある です。

+1

これは問題の標準ライブラリを不適合にします。すべてのC標準ライブラリ名は ''ヘッダが使用されたときに ':: std'に置かれるはずです。 – Angew

+0

同意します。 ''はそれらを 'std ::'に置く必要があり、それらをグローバル名前空間に入れることもできます。 「」は逆です。 – MSalters

関連する問題