2013-07-01 2 views
0

Я создал проект C++/CLI (Visual C++) в профессионале visual studio 2010. Затем я добавил в проект очень маленький класс C++. Followng это кодКак вызвать код C++ из кода C++/CLI?

#include <stdafx.h> 
#include <iostream> 

using namespace std; 

    class Tester 
    { 

    public: 
     Tester(){}; 

     void show() 
     { 
      cout << "OKOK..Printing" << endl; 
     } 

    }; 

Теперь я перетащен кнопка на автоматически построенном с графическим интерфейсом, и я собираюсь позвонить выше коду с кнопки. Ниже приведен код кнопки.

private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { 
       Tester ^t = gcnew Tester(); 
          //Test t; - giving errors as well 

      } 
    }; 

Когда я выполнить код, я получаю следующую ошибку

1>------ Build started: Project: testdamn, Configuration: Debug Win32 ------ 
1>Build started 7/1/2013 12:59:38 PM. 
1>InitializeBuildStatus: 
1> Touching "Debug\testdamn.unsuccessfulbuild". 
1>GenerateTargetFrameworkMonikerAttribute: 
1>Skipping target "GenerateTargetFrameworkMonikerAttribute" because all output files are up-to-date with respect to the input files. 
1>ClCompile: 
1> All outputs are up-to-date. 
1> Test.cpp 
1> testdamn.cpp 
1>c:\users\yohan\documents\visual studio 2010\projects\testdamn\testdamn\Form1.h(79): error C2065: 'Tester' : undeclared identifier 
1>c:\users\yohan\documents\visual studio 2010\projects\testdamn\testdamn\Form1.h(79): error C2065: 't' : undeclared identifier 
1>c:\users\yohan\documents\visual studio 2010\projects\testdamn\testdamn\Form1.h(79): error C2061: syntax error : identifier 'Tester' 
1> Generating Code... 
1> 
1>Build FAILED. 
1> 
1>Time Elapsed 00:00:01.86 
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ========== 

Я также заметил, когда я снял класс вызова с помощью кнопки, программа построения хорошо. Итак, как я могу вызвать эти классы C++ из C++/CLI?

Пожалуйста, помогите!

+1

Вы включили 'заголовок файла класса Tester' в форму GUI? –

+0

@MarceloCantos: Нет, потому что у этого нет файла заголовка. Это требуется? –

+0

Да. В коде GUI должно быть указано определение класса Tester. Вот почему он жалуется: «Тестер: необъявленный идентификатор». Кроме того, вы не можете рассматривать его как класс .Net. '^ t' и' gcnew' не будут работать. –

ответ

4

Посмотрите на ошибки компилятора вы получаете:

1>c:\...\testdamn\Form1.h(79): error C2065: 'Tester' : undeclared identifier 
1>c:\...\testdamn\Form1.h(79): error C2065: 't' : undeclared identifier 
1>c:\...\testdamn\Form1.h(79): error C2061: syntax error : identifier 'Tester' 

Компилятор говорит вам, что он не может найти любой класс с именем Tester и, следовательно, не может его использовать.

Чтобы использовать класс Tester, вам необходимо включить файл заголовка, содержащий его определение, в файл, содержащий определение класса Form. Это то же самое, что и вы должны были включить заголовок iostream, чтобы использовать std::cout.

Но как только вы это исправить, вы будете есть еще одна проблема: вы пытаетесь использовать gcnew инстанцировать Tester, который является неуправляемого класс. gcnew предназначен для создания классов классов и выделяет память из управляемой кучи. Вы хотите использовать обычный оператор C++ new для создания регулярных неуправляемых классов C++. Как только компилятор сможет увидеть определение класса Tester, он заметит это несоответствие и произведет еще одну ошибку.

+0

Отлично! Большое спасибо! Я действительно хочу, чтобы я мог получить помощь от всех вас, пока не закончу свой последний проект :) Я отмечаю это как ответ. Спасибо, что посоветовал мне обратиться к следующей возможной ошибке! –

Смежные вопросы