use*_*778 0 c# c++-cli class visual-studio-2012
我有一个使用C++/CLI代码的C#项目.我有一个以MainC++/CLI命名的托管类,我有一个名为的非托管类codemain.在C#中,我创建了一个托管类的对象并使用它,但是当我运行我的项目时,我遇到了一些错误 - 大多数是:cm : undeclared identifier.
我的所有代码都是seaCV命名空间.当我在托管类()之外cm的seaCV命名空间中定义对象时Main,我的项目运行没有错误,但是当我cm在托管类中定义时,我得到了该错误.问题出在哪儿?
我在seaCV.h文件中的托管类:
#pragma once
#include <iostream>
#include "cv.h"
#include "cvaux.h"
#include "highgui.h"
using namespace System;
namespace seaCV
{
public ref class Main
{
public:
codemain *cm;
Main();
~Main();
void initizalize(int x, int y, int x2, int y2, int tr_ind);
};
}
Run Code Online (Sandbox Code Playgroud)
和seaCV.cpp文件:
#include "seaCV.h"
#include "codemain.h"
namespace seaCV
{
void Main::initizalize (int x, int y, int x2, int y2, int trix) {
cm->init(x,y,x2,y2,trix);
}
Main::Main() {
cm=new codemain();
}
Main::~Main() {
delete cm;
cm=0;
}
}
Run Code Online (Sandbox Code Playgroud)
最后,我的非托管代码在codemain.h:
#pragma once
#include "cv.h"
#include "cvaux.h"
#include "highgui.h"
namespace seaCV
{
public class codemain
{
public:
int xc,yc,xr,yr;
codemain(void) {
xc = xr = yc = yr = 1;
}
void init(int x, int y, int x2, int y2, int tracker_index) {
xc = x;
yc = y;
xr = x2;
yr = y2;
...
}
};
}
Run Code Online (Sandbox Code Playgroud)
#include "seaCV.h"
#include "codemain.h"
Run Code Online (Sandbox Code Playgroud)
那是你的问题.编译器将在您的seaCV.h文件中看到"codemain",但不知道它的含义.你必须交换两个#includes.
请记住,与C#编译器不同,C++编译器是单通道编译器.它需要在使用之前查看标识符的定义.
你的代码中有几个小问题:
!Main,以便在C#程序员忘记调用Dispose()时不会泄漏内存.| 归档时间: |
|
| 查看次数: |
1014 次 |
| 最近记录: |