C++ 具有自定义定义的托管类类型的函数返回

C++ 具有自定义定义的托管类类型的函数返回,c++,c++-cli,clr,C++,C++ Cli,Clr,我在使用C++/CLI时遇到问题。 我定义了一个名为Person的类,它是一个包含get和set的简单类: #布拉格语一次 使用名称空间系统 namespace CLI { public ref class Person { public: Person(); // gets and sets private: String^ name; int age; }; } namespace CL

我在使用C++/CLI时遇到问题。 我定义了一个名为Person的类,它是一个包含get和set的简单类: #布拉格语一次 使用名称空间系统

namespace CLI
{
    public ref class Person
    {
    public:
        Person();
        // gets and sets
    private:
        String^ name;
        int age;
    };
}
namespace CLI
{
    // Next is the managed wrapper of Logic:
    public ref class Matrix
    {
    public:
        Matrix();
        Person^ getPerson(int i, int j)
        {
            return paa[i][j]; // no problem
        }
        void Destroy();
    private:
        array<array<Person^>^>^ paa;
    };
}
然后我用person定义了一个矩阵类: #布拉格语一次 #包括“Person.h” 使用名称空间系统

namespace CLI
{
    public ref class Person
    {
    public:
        Person();
        // gets and sets
    private:
        String^ name;
        int age;
    };
}
namespace CLI
{
    // Next is the managed wrapper of Logic:
    public ref class Matrix
    {
    public:
        Matrix();
        Person^ getPerson(int i, int j)
        {
            return paa[i][j]; // no problem
        }
        void Destroy();
    private:
        array<array<Person^>^>^ paa;
    };
}
namespace CLI
{
//接下来是逻辑的托管包装器:
公共引用类矩阵
{
公众:
矩阵();
Person^getPerson(inti,intj)
{
返回paa[i][j];//没问题
}
无效销毁();
私人:
数组^paa;
};
}
非常奇怪的是,如果我将getPerson()函数移动到.cpp,就会出现错误

以下是带有错误的Matrix.h和Matrix.cpp:

// Matrix.h
#pragma once
#include "Person.h"
using namespace System;

namespace CLI
{
    public ref class Matrix
    {
    public:
        Matrix();
        Person^ getPerson(int i, int j);
        void Destroy();
    private:
        array<array<Person^>^>^ paa;
    };
}


// Matrix.cpp
#include "Matrix.h"

CLI::Matrix::Matrix()
{
    // init the matrix
}

Person^ CLI::Matrix::getPerson(int i, int j) // errors here
{
    return paa[i][j];
}
//Matrix.h
#布拉格语一次
#包括“Person.h”
使用名称空间系统;
名称空间CLI
{
公共引用类矩阵
{
公众:
矩阵();
人员^getPerson(int i、int j);
无效销毁();
私人:
数组^paa;
};
}
//Matrix.cpp
#包括“矩阵h”
CLI::Matrix::Matrix()
{
//初始化矩阵
}
Person^CLI::Matrix::getPerson(inti,intj)//此处有错误
{
返回paa[i][j];
}
其中一个错误是“UndefinedIdentifier:Person”,这个错误指向函数返回类型。我试着在函数体中写“Person^p=gcnew Person;”,没有错误。 另一个错误是“函数定义与.h文件中的函数定义不兼容”(我没有使用英文版本的VS,我翻译了消息,可能不太准确。)

如果我更改了返回类型,而不是自定义定义的,比如int、String^,那么就可以了

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

Person^ CLI::Matrix::getPerson(int i, int j)
Person
是在
CLI
命名空间中定义的,但此处不引用该命名空间

由于声明包含在
名称空间CLI{}
块中,而cpp文件没有该声明,因此头文件中没有收到错误消息


要解决此问题,我建议您将cpp文件中的所有代码封装在
名称空间CLI{}
块中,并从各种声明中删除
CLI::
。我认为这看起来比另一种解决方案更干净,即完全限定返回类型(
CLI::Person^
)。

请向我们展示导致错误的代码,而不是没有导致错误的代码。@DavidYaw我编辑过,我给出了有错误的代码。