2013-07-13 53 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

相關問題