Как передать структуру из C ++ в C? - PullRequest
0 голосов
/ 27 февраля 2011

Обновлено: 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 ]

2 голосов
/ 27 февраля 2011

Переместить сетку в 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);
}
0 голосов
/ 03 марта 2011

Вы можете сделать это намного проще, удалив extern "C" везде и просто используя привязки C ++.

Сказав это, у вас фактически есть многократно определенный символ grid, потому что вы включаете файл main.h в две единицы перевода. Переместите строку vec3 *grid[sizeOfGrid] в main.cpp.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...