我有两个类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 *
)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句