2014-11-12 1 views
1

간단히 말해서 텍스처 및 기타 반 - 상수 객체를 하나의 .h 또는 .cpp 파일 내에 준비하여 다른 파일 내에서 사용할 수있게하려고합니다. ,main() 전에 별도의 파일로 클래스 객체 초기화/준비

class Position 
{ 
private: 
    int x; 
    int y; 

public: 
    /* constructor, destructor, and other code */ 

    void setPosition(int x, int y) { this->x = x; 
            this->y = y; } 
}; 

그런 다음, 다른 파일에이 같은이 : 나는 같은 것을 할 수 있도록하려면

//otherfile.extension 

// I want to be able to declare these objects here... 
Position specialPosition1; 
Position specialPosition2; 

// ...and then be able to do this somewhere where it will keep 
// this information for any other file that includes this. 
specialPosition1.setPosition(25, 25); 
specialPosition2.setPosition(-10, -10); 

내가 그들의 setPosition() 메서드를 호출하고 내을 준비 할 수 있도록하려면를 가능한 경우 다른 파일에서 사용되는 동일한 파일. 또는 최소한 다른 곳에서 사용되기 전에 정보가 존재하도록 설정할 수 있어야합니다.

내가 회상한다면 정적 인으로 만들면이 문제가 해결되지 않을 것입니다. 게다가 나는 아직 (알려진) 장소가 없어서 이라고 불러서 물건을 준비 할 곳이 없다. 나는 또한 그것의 나의 지식이 막연하지만 extern에 약간의 비트를 읽었다.

main() 전에 이러한 개체를 준비하거나 좀 더 정확하게하려면 이러한 개체를 다른 파일에서 사용하기 전에 준비하는 "최상의"방법은 무엇입니까?

답변

1

나는 으로 전화하고 싶지 않습니다. 나는 그것을 생성자에서 초기화하는 것이 더 좋을 것이라고 생각한다. 나는이 특별한 위치가 일정하다고 가정한다.

Position.h을 :

나는 당신이 .H 파일에 extern로 선언 한 후 .CPP에서 그들을 정의 할 생각

struct Position { 
    int x; 
    int y; 
    Position(int _x, int _y) : x(_x), y(_y) {} 
    //... 
}; 

SpecialPositions.h :

#include "Position.h" 

extern const Position specialPosition1; 
extern const Position specialPosition2; 

SpecialPositions.cpp :

#include "SpecialPositions.h" 

const Position specialPosition1{25, 25}; 
const Position specialPosition2{-10, -10}; 

하여 Main.cpp :

#include "SpecialPositions.h" 
#include <iostream> 
int main() { 
    std::cout << specialPosition1.x << "\n"; 
} 

아니면 시간 상수를 컴파일하고 constexpr을 사용하여 강제로 수 있습니다. Position 생성자 constexpr로 변경합니다

다음
constexpr Position(int _x, int _y) : x(x_), y(_y) {} 

그리고 그냥 SpecialPositions.h 파일 (SpecialPositions.cpp 필요 없음)에서 그들을 정의

constexpr Position specialPosition1{25, 25}; 
constexpr Position specialPosition2{-10, -10}; 
+0

이 내가 알 필요가 정확히 것입니다. extern과 같은 것에 대해서는 약간 알고 있었지만, 객체가 const 인 경우 다른 생성자를 호출 할 수는 없다는 것을 솔직히 알지 못했지만 상식이어야한다고 생각했습니다. 그러나 괄호를 사용하지 않고 괄호를 사용하는 이유가 있습니까? 그것을 찾을 때, 내가 본 대부분의 예제는 괄호를 사용합니다. [여기] (예 : http://www.learncpp.com/cpp-tutorial/810-const-class-objects-and-member-functions/). – Uulamock

+1

@Uulamock [constexpr] (http : //en.cppreference.com/w/cpp/language/constexpr)은 C++ 11의 새로운 기능이며'constexpr' 생성자는 원하는 경우 컴파일 타임에 생성 될 수있는 객체가 const 여야한다는 것을 의미하지 않습니다. 내가 괄호를 사용하지 않고 괄호를 사용하지 않은 특별한 이유는 없습니다. [균일 초기화] (http://www.learncpp.com/cpp-tutorial/b-4-initializer-lists-and-uniform-initialization/)라고도하며 C++ 11의 새로운 기능으로 약간의 이점이 있습니다 어떤 상황에서는. –

관련 문제