我在SO上阅读了关于VLA的不同答案,但无法找到答案。在我的例子中,我有一个分配内存的函数:
template<typename T>
void allocMemory(T *&data, const size_t numElems)
{
#ifdef PINNED_MEMORY
// allocate pinned memory
#else
data = new T[numElems];
#endif
}
现在,我有一个vector类,我使用这个方法:
template<typename T>
class MyVec
{
T *data;
size_t size;
public:
MyVec(size_t _size): size(_size)
{ allocMemory<T>(data, size); } // gives VLA warning
};
当我使用nvcc(V0.2.1221)编译器进行编译时会发生这种情况,我想在下面使用gcc编译器(?)实际警告是:
myvec.h:16:6:警告:ISO C ++不支持可变长度数组类型[-Wvla] data = new T [numElems];
答案 0 :(得分:2)
我认为你没有以正确的方式编译你的项目。
尝试使用流动的make文件。
CUDA_INSTALL_PATH:= / usr / local / cuda
CXX:= g ++ CC:= gcc 链接:= g ++ -fPIC NVCC:= nvcc
#包括
包含= -I。 -I $(CUDA_INSTALL_PATH)/包括
#Common flags
COMMONFLAGS + = $(包括) NVCCFLAGS + = $(共同标志) CXXFLAGS + = $(COMMONFLAGS) CFLAGS + = $(COMMONFLAGS)
LIB_CUDA:= -L $(CUDA_INSTALL_PATH)/ lib -lcudart
#OBJS = GpuSolver.cu.o main.cpp.o
OBJS = main.cu.o a.cpp.o #the your files
TARGET = a.out
LINKLINE = $(LINK)-o $(TARGET)$(OBJS)$(LIB_CUDA)
.SUFFIXES:.c .cpp .cu .o
%。c.o:%。c $(CC)$(CFLAGS)-c $&lt; -o $ @
%。cu.o:%。cu $(NVCC)$(NVCCFLAGS)-c $&lt; -o $ @
%。cpp.o:%。cpp $(CXX)$(CXXFLAGS)-c $&lt; -o $ @
$(TARGET):$(OBJS)“makefile”#your makefile文件名 $(LINKLINE)