说明我的标题,尝试在我的代码中使用静态方法编译我的文件。
我的computeCivIndex()
试图从用户那里得到5个输入并进行计算并返回浮点值。
this.sunType
用于java语法,但对于V ++,如果两者名称相同,我应该用它们将它们链接在一起?
我的代码中有getter和setter方法,还有2个构造函数太长而无法发布。
这是我的错误:
test.cpp:159: error: cannot declare member function ‘static float LocationData::computeCivIndex(std::string, int, int, float, float)’ to have static linkage
test.cpp: In static member function ‘static float LocationData::computeCivIndex(std::string, int, int, float, float)’:
test.cpp:161: error: ‘this’ is unavailable for static member functions
代码:
class LocationData
{
private:
string sunType;
int noOfEarthLikePlanets;
int noOfEarthLikeMoons;
float aveParticulateDensity;
float avePlasmaDensity;
public:
static float computeCivIndex(string,int,int,float,float);
};
static float LocationData::computeCivIndex(string sunType, int noOfEarthLikePlanets,int noOfEarthLikemoons, float aveParticulateDensity, float avePlasmaDensity)
{
this.sunType = sunType;
this.noOfEarthLikePlanets = noOfEarthLikePlanets;
this.noOfEarthLikeMoons = noOfEarthLikeMoons;
this.aveParticulateDensity = aveParticulateDensity;
this.avePlasmaDensity = avePlasmaDensity;
if(sunType == "Type O")
//and more for computation
}
答案 0 :(得分:3)
static
声明推迟static
实施。静态实现意味着您的函数符号仅在实现它的文件中可用。
在功能实现之前简单地删除静态。此外,静态函数是类函数,您无法访问其中的类的非静态成员。这些是在没有对象实例的情况下使用的,因此,没有实例变量。
float LocationData::computeCivIndex(string sunType, int noOfEarthLikePlanets,int noOfEarthLikemoons, float aveParticulateDensity, float avePlasmaDensity)
{
}
答案 1 :(得分:2)
编译器错误对我来说似乎相当清楚:
错误:'this'不适用于静态成员函数
基本上,因为成员是static
,所以它不会在特定类型实例的上下文中执行 - 因此在方法中使用this
是没有意义的。你做尝试使用this
,因此错误。
来自MSDN documentation for static
:
在类声明中声明成员函数时,static关键字指定该函数由该类的所有实例共享。静态成员函数无法访问实例成员,因为该函数没有隐式this指针。要访问实例成员,请使用作为实例指针或引用的参数声明该函数。
听起来你只是不想将成员声明为静态。
(顺便说一句,我不喜欢描述它“由所有类的实例共享” - 我更喜欢它不是特定于类的任何特定实例的想法。没有必要创建的任何实例。)