如何将结构从C ++传递给C?

时间:2011-02-27 03:48:59

标签: c++ c arrays cuda

更新: main.h

typedef struct
{
    float x;
    float y;
    float z;
}vec3;
const int sizeOfGrid = 20000;
vec3 *grid[sizeOfGrid];//assume initialized

的main.cpp

#include "main.h"
extern "C" void cudaTranslate(vec3 *x);
void display()
{
    cudaTranslate(grid);
}

lineCuda.cu

#include <stdio.h>
#include <assert.h>
#include <cuda.h>
#include "main.h"

extern "C" void cudaTranslate(vec3 *x)
{

}

得到:
main.obj:错误LNK2005:“struct vec3 * * grid”(?grid @@ 3PAPAUvec3 @@ A)已在lineCuda.obj中定义
致命错误LNK1169:找到一个或多个多重定义的符号

2 个答案:

答案 0 :(得分:2)

将网格移动到main.cpp。将它传递给lineCuda.cu。问题解决了。

更新: main.h

typedef struct
{
    float x;
    float y;
    float z;
}vec3;
const int sizeOfGrid = 20000;

的main.cpp

#include "main.h"
vec3 *grid[sizeOfGrid];//assume initialized
extern "C" void cudaTranslate(vec3 *x);
void display()
{
    cudaTranslate(grid);
}

答案 1 :(得分:0)

通过在任何地方删除extern "C"并使用C ++绑定,可以使这更简单。

话虽如此,您实际上有一个乘法定义的符号grid,因为您将文件main.h包含在两个翻译单元中。将行vec3 *grid[sizeOfGrid]移动到main.cpp。