C ++ rand()函数不适用于MPI

时间:2016-12-02 14:10:41

标签: c++ random

我在这里有一个有趣的情况。

我已经包含了#include <stdlib.h>库,我希望这些库允许我使用rand()

与此同时,我使用了2个不同的解决方案,其中一个使用std::rand(),另一个只使用rand(),我已经在程序using namespace std的顶部声明了这两种情况。

但我仍然得到这个错误:

  

无法解析变量'rand'

这是我的代码:

void makeAB() {
    for (i = 0; i < NUM_ROWS_A; i++) {
        for (j = 0; j < NUM_COLUMNS_A; j++) {
            int i = std::rand();
            mat_a[i][j] = rand() % 10;//i + j;
        }
    }
}

知道我做错了什么吗?

修改 这是CMakeList.txt

 cmake_minimum_required(VERSION 3.6)
project(MPI_Project)


find_package(MPI REQUIRED)
include_directories(${MPI_INCLUDE_PATH})

SET(CMAKE_C_COMPILER mpicc)
SET(CMAKE_CXX_COMPILER mpicxx)

set_source_files_properties(main.c PROPERTIES LANGUAGE CXX)


set(SOURCE_FILES main.cpp)
add_executable(MPI_Project ${SOURCE_FILES})

1 个答案:

答案 0 :(得分:0)

stdlib.h下包含rand名称空间std(因为它是C标题,而不是C ++标题;它甚至不知道是什么命名空间是)。这就是C ++包装的标题的用途,in this case cstdlib。如果您想要命名空间rand,请使用#include <cstdlib>,而不是#include <stdlib.h>

鉴于您正在使用CLion,您可能会将C ++文件命名为C扩展名,which causes problems for C++ specific includes。使用.cpp扩展名重命名文件,或者根据上一个链接更改CMakeList.txt文件,使其明确将.c文件的语言设置为C ++,更改hacky行喜欢这个:

set_source_files_properties(NAMEOFCFILE.c PROPERTIES COMPILE_FLAGS "-x c++")

(只是添加编译器标志而没有正确通知CLion它的C ++)

set_source_files_properties(NAMEOFCFILE.c PROPERTIES LANGUAGE CXX)

正确通知CLion。