2012-04-16 6 views
1

У меня возникли проблемы с использованием codegen (через интерфейс gui).codegen matlab to C++: - Проблемы при попытке создания C++-основанного .exe, а не c?

Я успешно разработал очень простую программу на основе C. на основе следующих двух файлов.

coderand.m

function r = coderand() %#codegen 
r = rand(); 

main.c

#include <stdio.h> 
#include <stdlib.h> 
#include "coderand.h" 
int main() 
{ 
    printf("coderand=%g\n", coderand()); 
    return 0; 
} 

Если теперь попытаться изменить вне main.c для того же кода в main.cpp,

основной. cpp

#include <stdio.h> 
#include <stdlib.h> 
#include "coderand.h" 

void main(int argc, char **argv) 
{ 
    printf("coderand=%g\n", coderand()); 
} 

Получаю из-за ошибок компиляции.

main.obj : error LNK2019: unresolved external symbol "double __cdecl coderand(void)" ([email protected]@YANXZ) referenced in function _main 25 F:\CoderTest\coderand.exe : fatal error LNK1120: 1 unresolved externals 

Любая помощь очень ценится.

Edit: - решаемые себе ...

Для тех, кто страдает той же проблемой ...

Coder -> Дополнительные настройки -> Все настройки -> Дополнительно -> Language..change C в C++

ответ

4

C++ может вызывать функции C без проблем, вы просто должны позволить компилятору знать, что C соглашение о вызове относится к этой функции, например, так:

extern "C" { 
# include "coderand.h" 
} 
+0

Я знаю об этом, но я думаю, вы, возможно, неправильно поняли конкретный вопрос. Я нашел решение самостоятельно ... скрытый глубоко в настройках Matlab - это крошечная коробка, в которой говорится C или C++ .... Спасибо в любом случае – oracle3001

+4

@ oracle3001: Вы попробовали мой ответ? Он разрешит неразрешенную внешнюю ошибку, поскольку будет искать функцию, названную в соответствии с соглашениями C, а не соглашениями на C++. Соглашение об именах C++ управляет именем для включения типов параметров, в соглашении C нет. –