gpt4 book ai didi

C++ 可变长度数组 (VLA) 警告

转载 作者:行者123 更新时间:2023-11-28 02:51:13 27 4
gpt4 key购买 nike

我在 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];

最佳答案

我认为您没有以正确的方式编译您的项目。

尝试使用流畅的 make 文件。

CUDA_INSTALL_PATH := /usr/local/cuda

CXX := g++
CC := gcc
LINK := g++ -fPIC
NVCC := nvcc

#Includes

INCLUDES = -I. -I$(CUDA_INSTALL_PATH)/include

#Common flags

COMMONFLAGS += $(INCLUDES)
NVCCFLAGS += $(COMMONFLAGS)
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 # your files

TARGET = a.out

LINKLINE = $(LINK) -o $(TARGET) $(OBJS) $(LIB_CUDA)

.SUFFIXES: .c .cpp .cu .o

%.c.o: %.c
$(CC) $(CFLAGS) -c $< -o $@

.cu.o: %.cu
$(NVCC) $(NVCCFLAGS) -c $< -o $@

%.cpp.o: %.cpp
$(CXX) $(CXXFLAGS) -c $< -o $@

$(TARGET): $(OBJS) "makefile" #your makefile file name
$(LINKLINE)

关于C++ 可变长度数组 (VLA) 警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23008474/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com