我在这里有一个有趣的情况。
我已经包含了#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})
答案 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。