编程语言
首页 > 编程语言> > 在C/C++LI中创建托管类和名称空间时出现问题

在C/C++LI中创建托管类和名称空间时出现问题

作者:互联网

我在用C/C++LI创建带有名称空间的托管类时遇到问题.

我要执行以下操作:

#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)编译器将公共引用类Pets放在头文件中时会抱怨.它说必须有语法错误.

智能感知错误:

期望一个声明

其他错误:

‘{‘:缺少函数标头(旧式的正式列表?)

语法错误:“公共”

我似乎找不到任何能同时显示标头和cpp文件的C/C++LI示例.

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

请让我知道是否需要提供更多信息.

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

解决方法:

在头文件中,应该只包含前向声明.

// 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.
}

标签:namespaces,c-cli,c
来源: https://codeday.me/bug/20191208/2089424.html