gpt4 book ai didi

c# - 在 C++/CLI 中创建托管类和命名空间时出现问题

转载 作者:行者123 更新时间:2023-11-30 16:29:02 26 4
gpt4 key购买 nike

我在使用 C++/CLI 命名空间创建托管类时遇到问题。

我想做以下事情:

#pragma once
#include "abc.h"
#ifdef _MANAGED
#using <system.dll>
using namespace System;
using namespace System::IO;
using namespace System::Collections::Generic;
using namespace System::Globalization;
#endif

namespace Animals
{
public ref class Pets
{
Pets::Pets(){}
};
}

我有几个不同的问题:

A) 当我将此代码放入 .cpp 文件时,它编译正常。但是,命名空间似乎没有按预期工作(请参阅我创建的这个问题:Namespace not recognized in C++/CLI)列出的唯一答案是我必须在头文件中声明类/命名空间。但这是一个问题,因为..

B) 当 public ref class Pets 放在头文件中时,编译器会报错。它说一定有语法错误。

智能感知错误:

需要一个声明

其他错误:

'{':缺少函数头(旧式正式列表?)

语法错误:'public'

我似乎找不到任何同时显示 header 和 cpp 文件的优秀 C++/CLI 示例。

所以我的问题是:如何使托管类和命名空间都按预期工作? (即我做错了什么?)

如果我需要包含更多信息,请告诉我。

预先感谢您的时间和耐心:)

最佳答案

在头文件中应该只有前向声明。

// abc.h
#pragma once

namespace Animals
{
public ref class Pets
{
Pets(); // forward declaration
// Pets::Pets is redundant and wrong, because you are inside
// the class Pets
};
}


// abc.cpp
#include "abc.h"
#ifdef _MANAGED
#using <system.dll>
using namespace System;
using namespace System::IO;
using namespace System::Collections::Generic;
using namespace System::Globalization;
#endif

namespace Animals
{
Pets::Pets() {} // implementation
// Now Pets::Pets() is right, because you dont write the class... wrapper again.
}

关于c# - 在 C++/CLI 中创建托管类和命名空间时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6698709/

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