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

我在使用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(){}
        };
    }

我有几个不同的问题:

答)当我将这段代码放入.cpp文件时,它编译得很好。 但是,它看起来名称空间不能按预期工作(请参阅我创建的这个问题:在C ++ / CLI中不能识别名称空间)列出的唯一答案是我必须在头文件中声明类/名称空间。 但这是一个问题,因为..

B)当编译器放置在头文件中时,编译器会抱怨public ref class Pets 。 它说,必须有一个语法错误。

智能感知错误:

expected a declaration

其他错误:

'{' : missing function header (old-style formal list?)

syntax error: 'public'

我似乎无法找到任何显示头文件和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.
}
链接地址: http://www.djcxy.com/p/59611.html

上一篇: Problem creating managed classes and namespaces in C++/CLI

下一篇: Ambiguous symbol of a namespace and a class