C++ 具有自定义定义的托管类类型的函数返回
我在使用C++/CLI时遇到问题。 我定义了一个名为Person的类,它是一个包含get和set的简单类: #布拉格语一次 使用名称空间系统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
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我编辑过,我给出了有错误的代码。