托管代码中存在未声明的标识符错误..Visual C#

本文关键字:错误 Visual 标识符 存在 未声明 托管代码 | 更新日期: 2023-09-27 18:12:41

我有一个使用C++/CLI代码的C#项目。我在C++/CLI中有一个名为Main的托管类,我有一个名称为codemain的非托管类。在C#中,我创建了一个托管类的对象并使用它,但当我运行项目时,我会遇到一些错误——大多数是:cm : undeclared identifier

我的所有代码都是seaCV名称空间。当我在托管类(Main(之外的seaCV命名空间中定义cm对象时,我的项目运行时没有错误,但当我在该托管类内定义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);    
    };
}

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;
    }       
}

最后,我的非托管代码位于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;
            ...
        }
    };
}

托管代码中存在未声明的标识符错误..Visual C#

#include "seaCV.h"
#include "codemain.h"

这是你的问题。编译器会在seaCV.h文件中看到"codemain",但不知道它的含义。您必须交换两个#include。

请记住,C++编译器是一个单程编译器,与C#编译器不同。在使用标识符之前,它需要查看标识符的定义。

代码中的几个小问题:

  • 声明本机C++类public是无效语法,请删除public
  • 您的cm变量应该是private,这样C#代码就看不到它
  • 您必须为Main((类!Main编写一个终结器,这样当C#程序员忘记调用Dispose((时就不会泄漏内存

查看关于在c#中使用非托管代码的链接:

http://www.codeproject.com/Articles/1392/Using-Unmanaged-code-and-assembler-in-C

相关文章: