【问题标题】:why I am getting " 'some class' does not contain a definition for 'some method' " error while the class has that method?为什么当类具有该方法时,我收到“'some class' does not contain a definition for 'some method'”错误?
【发布时间】:2017-02-27 21:13:49
【问题描述】:

我正在尝试完成一个使用 c++ 库和 c# 控制台应用程序的简单教程。 这里我有一个简单的类库:

cpp 文件:

#include "stdafx.h"

#include "ClassLibraryCPP.h"

using namespace ClassLibraryCPP;

void myClass::test() 
{
    Console::WriteLine("hello cpp/cli!");
}

头文件:

#pragma once

using namespace System;

namespace ClassLibraryCPP
{

    public class myClass
    {
    public:
        void test();
    };
}

现在这是我的 c# 控制台:

using ClassLibraryCPP;

namespace ConsoleApplicationCS
{
    class Program
    {
        static void Main(string[] args)
        {
            myClass testClass;
            testClass = new myClass();
            testClass.test();
        }
    }
}

我明白了:

“myClass”不包含“test”的定义,也没有扩展名 接受“myClass”类型的第一个参数的方法“test”可以是 找到(您是否缺少 using 指令或程序集引用?)

但是我已经创建了myClasstest 方法public 那么为什么.test() 对控制台应用程序不可见?


更新: 添加 ref 以创建托管类,然后重建 C++ 项目(通过右键单击并重建而不仅仅是重建解决方案)解决了这个问题。 我还发现这个问题相关: C# code can't "see" the methods in my C++ dll 我仍然不明白这是如何工作的: https://www.youtube.com/watch?v=xTRTY-fOIe8&t=1800s

【问题讨论】:

  • 在cpp文件中,使用void ClassLibraryCPP::myClass::test() {...}
  • 你做 dllexport 吗?
  • @IvanRubinson,不,我没有使用 dllexport。

标签: c# dll c++-cli


【解决方案1】:

让您的班级受到管理:

public ref class myClass
{
public:
    void test();
};

更改方法声明:

void ClassLibraryCPP::myClass::test()
{
  Console::WriteLine("hello cpp/cli!");
}

【讨论】:

  • 从 C# 中,您指的是 C++ 项目或您在构建结果中获得的库?你没有忘记重建项目吗? (有时会发生:))
  • 我得到它是一个语法错误,例如 test() 带有红色下划线。我尝试重建很多次。 :(
  • 同样的事情也发生在我身上。
猜你喜欢
  • 2021-09-19
  • 1970-01-01
  • 1970-01-01
  • 2022-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-14
  • 1970-01-01
相关资源
最近更新 更多