我在单独的文件中有两个类SHCalculator
和SphericalLightProbe
。我将它们完全剥离以显示我得到的错误这是四个文件:
SHCalculator.h
#pragma once
namespace SphericalHarmonics
{
class SHCalculator
{
private:
public:
void Test();
SphericalLightProbe Test2();
};
}
SHCalculator.cpp
#include "pch.h"
#include "SphericalLightProbe.h"
#include "SHCalculator.h"
namespace SphericalHarmonics
{
void SHCalculator::Test()
{
SphericalLightProbe sp(2, 3.4f);
for (int i = 0; i < sp.coeffs.size(); i++)
{
std::cout << sp.coeffs[i] << std::endl;
}
}
SphericalLightProbe SHCalculator::Test2()
{
SphericalLightProbe sp(2, 4.3f);
for (int i = 0; i < sp.coeffs.size(); i++)
{
std::cout << sp.coeffs[i] << std::endl;
}
return sp;
}
}
SphericalLightProbe.h
#pragma once
namespace SphericalHarmonics
{
class SphericalLightProbe
{
private:
public:
SphericalLightProbe() { }
SphericalLightProbe(int numCoeffs);
SphericalLightProbe(int numCoeffs, float value);
std::vector<Eigen::Vector3f> coeffs;
};
}
SphericalLightProbe.cpp
#include "pch.h"
#include "SphericalLightProbe.h"
namespace SphericalHarmonics
{
SphericalLightProbe::SphericalLightProbe(int numCoeffs)
{
coeffs.resize(numCoeffs);
}
SphericalLightProbe::SphericalLightProbe(int numCoeffs, float value)
{
coeffs.resize(numCoeffs, Eigen::Vector3f(value, value, value));
}
}
这给了我一堆错误:
C2238 unexpected token(s) preceding ';'
C2059 syntax error: '('
Message see declaration of 'SphericalHarmonics::SHCalculator'
E0020 identifier "SphericalLightProbe" is undefined
C3646 'Test2': unknown override specifier
C2039 'Test2': is not a member of 'SphericalHarmonics::SHCalculator'
如果我通过注释删除Test2()
,所有错误都会消失。我想知道为什么。
您缺少SHCalculator.h
头中的包含;
尝试如下:
#pragma once
#include "SphericalLightProbe.h"
namespace SphericalHarmonics
{
class SHCalculator
{
private:
public:
void Test();
SphericalLightProbe Test2();
};
}
注意如果你的
SHCalculator.cpp
文件包含上述内容,则不需要重复#include "SphericalLightProbe.h"
行。
但是,如果您出于任何原因想要避免包含,请使用前向声明,例如:
#pragma once
namespace SphericalHarmonics {
class SphericalLightProbe;
// ...
} // namespace SphericalHarmonics
注意前向声明通常不会强制您切换到指针(如
SphericalLightProbe *
)。