我在使用C ++ / CLI时遇到问题。 我定义了一个名为Person的类,它是一个带有gets和sets的简单类: #pragma一次 using namespace System;
namespace CLI
{
public ref class Person
{
public:
Person();
// gets and sets
private:
String^ name;
int age;
};
}
然后我用person定义了一个矩阵类: #pragma一次 #include“Person.h” using namespace System;
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;
};
}
很奇怪,如果我将getPerson()函数移动到.cpp,就会出现错误。
这是Matrix.h&amp; 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];
}
其中一个错误显示“Undefined identifier:Person”,此错误指向函数返回类型。我试着写“Person ^ p = gcnew Person;”在函数体中,没有错误。 另一个错误说“函数定义与.h文件中的函数不兼容”(我没有使用英文版的VS,我翻译了消息,可能不太准确。)
如果我更改了任何非自定义的返回类型,比如int,String ^,那就没关系。
如果需要更多信息,请与我们联系。
答案 0 :(得分:0)
Person^ CLI::Matrix::getPerson(int i, int j)
类Person
在CLI
命名空间中定义,但您在此处未引用该命名空间。
您没有在头文件中收到错误消息,因为声明包含在namespace CLI { }
块中,而cpp文件没有。
要解决此问题,我建议您将cpp文件中的所有代码括在namespace CLI { }
块中,并从各种声明中删除CLI::
。我认为这看起来比其他解决方案更清晰,即完全限定返回类型(CLI::Person^
)。