gpt4 book ai didi

c++ - 如何从C++/CLI代码调用C++代码?

转载 作者:行者123 更新时间:2023-12-02 09:47:25 25 4
gpt4 key购买 nike

我已经在Visual Studio 2010 Professional中创建了一个C++ / CLI(Visual C++)项目。然后,我在项目中添加了一个非常小的C++类。 Followng是代码

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

using namespace std;

class Tester
{

public:
Tester(){};

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

};

现在,我将一个按钮拖放到自动构建的GUI表单中,然后将要从该按钮调用上面的代码。以下是按钮的代码。
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++ / CLI调用这些C++类?

最佳答案

查看您收到的编译器错误:

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 header 相同。

但是,一旦解决此问题,就会遇到另一个问题:您试图使用 gcnew实例化 Tester,这是一个非托管类。 gcnew旨在实例化托管类,并从托管堆分配内存。您想使用常规C++ new运算符实例化常规C++非托管类。一旦编译器能够看到 Tester类的定义,它将注意到此不匹配并生成另一个错误。

关于c++ - 如何从C++/CLI代码调用C++代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17399356/

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