강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

khb4435님의 프로필 이미지
khb4435

작성한 질문수

홍정모의 따라하며 배우는 C++

8.11 정적 멤버 함수

오류가 왜 뜰까요?

작성

·

174

0

google검색하면 그냥 dev cpp쓰세요 이런 오류 안나타납니다. 뭐 그러네요

#include <iostream>

using namespace std;

class something{

private:

    static int s_value;

    int m_value;

public:

    static int getValue(){

        return s_value;

        //return ((this->))s_value; static 멤버평션에선 이거 오류

        //얘는 특정 객체를 이용해서 접근하는 용도가 아님.

        //return m_value; 얘도 안됌. static멤버평션은 static멤버변수만 리턴함

    }

    void speak(){

        cout<<"speak"<<endl;

    }

    static void staticSpeak(){

        //((this->))speak(); 다시 말하지만 static 멤버 펑션은 this, 객체랑 바인딩이 되어있지 않음.

    }

    

};

int something::s_value=1024;

int main(int argc, const char * argv[]) {

    //cout<<something::s_value<<endl; //오류 s_value가 public이면 가능

    

    something s1;

    cout<<s1.getValue()<<endl;

    //cout<<s1.s_value<<endl; //당연히 오류

    //이거 안되는건 getValue사용하면되니까 상관이 없는데 특정 인스턴스가 없는데도 위에껀 접근이 안되네

    //특정 인스턴스없을때 접근할 수 있으면 유용할텐데

    

    //위에 멤버함수를 static으로 전환 -> 특정 인스턴스 거치지 않고 접근할 수 있게됌.

    cout<<something::getValue()<<endl;

    

    cout<<s1.speak()<<endl; <--------오류나는 파트

    //cout<<something::speak()<<endl; 오류

    

    

    return 0;

}

답변 1

0

안녕하세요 😃

dev cpp 에서도 발생할 오류입니다. 

작성해주신 speak() 함수는 리턴 타입이 void 입니다. 즉, 아무것도 리턴하는게 없는 함수입니다.

그렇기 때문에 cout << s1.speac(); 가 오류가 나는 것입니다. s1.speak() 는 리턴하는게 아무것도 없는 함수이기에 cout 에 전달해줄게 없기 때문입니다.

khb4435님의 프로필 이미지
khb4435

작성한 질문수

질문하기