2013-07-13 2 views
0

3D 벡터를 처리하는 간단한 클래스가 있습니다. 나는 print 메소드와 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 

구현 : get_coo 정적이기 때문에

#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

잠시 시간을내어 함수 이름을 적어 두십시오. 빌드 프로세스에 미치는 영향은 무시할 만하며 추가 코드를 추가하지 않습니다. 그러나 독자 및 다른 사람들 (예 : 독자 또는 스택 오버플로)에게 더 쉽게 읽을 수있는 코드로 만들어줍니다. –

+0

왜 함수를 정적으로 유지 하시겠습니까? – Oktalist

답변

4

는 그것이이없는 비 정적 멤버 참조

헤더 특정 개체에 상대적이어야합니다 :하지만 항상 오류가 발생했습니다 작업 할 객체이며 객체 또는 객체에 대한 포인터로 한정하지 않고 비 정적 멤버에 액세스 할 수 없습니다. 시도 :

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

"* static * 멤버에 액세스 할 수 없습니다 ..."여야합니다. – jrok

+0

당신은 Tomek 맞아! 고맙습니다! :) – erbal

+0

감사합니다 jrok, 나는 나의 대답을 업데이 트했습니다. – Tomek

관련 문제