2013-07-13 52 views
0

我有一个简单的类,它处理3D矢量。我有一个打印方法和一个get_coo(它返回一个矢量的坐标)。我希望这些函数是静态方法,所以我可以通常使用它们与矢量。但是,我总是得到错误: 的非静态成员引用必须是相对于特定对象应该如何使用静态/非静态函数?

页眉:

#include "stdafx.h" 
#ifndef my_VECTOR_H 
#define my_VECTOR_H 

class my_vector{ 

private: 
    double a,b,c; //a vektor három iránya 

public: 
    my_vector(double a, double b, double c); //konstruktor 

    static double get_coo(const my_vector& v, unsigned int k); //koordináták kinyerése, 1-2-3 értékre a-b vagy c koordinátát adja vissza 

    void add_vector(const my_vector& v);//összeadás 

    static void print_vector(const my_vector& v); 
}; 

#endif 

实现:

#include "stdafx.h" 
    #include "my_Vector.h" 
    #include <iostream> 

    my_vector::my_vector(double a = 100, double b= 100, double c= 100):a(a),b(b),c(c){ 
     //default contstructor 
    } 

    void my_vector::add_vector(const my_vector& v){ 
     double  v_a = get_coo(v, 1), 
       v_b = get_coo(v, 2), 
       v_c = get_coo(v, 3); 

     a+=v_a; 
     b+=v_b; 
     c+=v_c; 
    } 


    double my_vector::get_coo(const my_vector& v, unsigned int k){ 
     switch(k){ 
     case 1: 
      return a; //here are the errors 
     case 2: 
      return b; 
     case 3: 
      return c; 
     } 
    } 

void my_vector::print_vector(const my_vector& v){ 
    std::cout << get_coo(v, 1) << std::endl; 
    std::cout << get_coo(v, 2) << std::endl; 
    std::cout << get_coo(v, 3) << std::endl; 
} 
+0

这是匈牙利语吗?也许你应该使用匈牙利符号以及... ;-) –

+0

花点时间,拼出函数名称。对构建过程的影响可以忽略不计,并且不会添加任何额外的代码。但是,它确实会使您的代码更易于读取,并使其他人(例如读取器或Stack Oveflow)更易读。 –

+0

为什么你想要的功能是静态的? – Oktalist

回答

4

由于get_coo是静态的它不具有对象进行操作,并且无法访问非静态成员,而无需使用对象或指向对象的指针进行限定。请尝试:

double my_vector::get_coo(const my_vector& v, unsigned int k){ 
    switch(k){ 
    case 1: 
     return v.a; //here are the errors 
    case 2: 
     return v.b; 
    case 3: 
     return v.c; 
    } 
} 
+1

应该是“无法访问*非静态*成员...”。 – jrok

+0

你是对的Tomek!谢谢! :) – erbal

+0

谢谢jrok,我更新了我的答案。 – Tomek

相关问题