2017-03-26 14 views
0

structクラスのグローバルインスタンスを特別な意味を持つプログラムに追加したいと思います。作品MWEは、グローバル定数emptyが、私はプログラムの先頭でグローバルを宣言しないようにinside_grid方法を変更することができれば、私は考えさせられた方法inside_gridのすべての呼び出しに渡さなければならないであろうconstexprコンストラクタを持つ構造体の前方宣言

// Example program 
#include <iostream> 

constexpr int x_max = 3; 
constexpr int y_max = 4; 

typedef struct Position { 

    constexpr Position(int x, int y) : x(x), y(y) {}; 

    int x; 
    int y; 

    inline bool operator!=(const Position &rhs) const { 
     return (x != rhs.x || y != rhs.y); 
    } 

    inline bool inside_grid(const Position &empty) const { 
     return (x >= 0 && x < x_max && y >= 0 && y < y_max && *this != empty); 
    } 

} Position; 

constexpr Position empty = Position(1,1); 


int main() 
{ 
    Position p1 = Position(2,3); 
    Position p2 = Position(1,1); 

    std::cout << "p1.inside_grid(empty) = " << p1.inside_grid(empty) << " and p2.inside_grid(empty) = " << p2.inside_grid(empty) << std::endl; 
} 

ですそうのような任意のパラメータを取る:

// Example program 
#include <iostream> 

struct Position; 

constexpr Position empty = Point(1, 1); 
constexpr int x_max = 3; 
constexpr int y_max = 4; 

typedef struct Position { 

    constexpr Position(int x, int y) : x(x), y(y) {}; 

    int x; 
    int y; 

    inline bool operator!=(const Position &rhs) const { 
     return (x != rhs.x || y != rhs.y); 
    } 

    inline bool inside_grid() const { 
     return (x >= 0 && x < x_max && y >= 0 && y < y_max && *this != empty); 
    } 

} Position; 


int main() 
{ 
    Position p1 = Position(2,3); 
    Position p2 = Position(1,1); 

    std::cout << "p1.inside_grid() = " << p1.inside_grid() << " and p2.inside_grid() = " << p2.inside_grid() << std::endl; 
} 

問題は、これが原因私は本当に理解できないエラーのためにコンパイルされないということです。 error: variable 'constexpr const Position empty' has initializer but incomplete type error: invalid use of incomplete type 'struct Position'

この問題は解決できますか?

答えて

2

あなたのinside_grid()メソッドを宣言転送しemptyが作成された後、後でそれを定義することができます。

// Example program 
#include <iostream> 

struct Position; 

constexpr int x_max = 3; 
constexpr int y_max = 4; 

typedef struct Position { 

    constexpr Position(int x, int y) : x(x), y(y) {}; 

    int x; 
    int y; 

    inline bool operator!=(const Position &rhs) const { 
     return (x != rhs.x || y != rhs.y); 
    } 

    bool inside_grid() const; 

} Position; 

constexpr Position empty = Position(1, 1); 

inline bool Position::inside_grid() const { 
    return (x >= 0 && x < x_max && y >= 0 && y < y_max && *this != empty); 
} 


int main() 
{ 
    Position p1 = Position(2,3); 
    Position p2 = Position(1,1); 

    std::cout << "p1.inside_grid() = " << p1.inside_grid() << " and p2.inside_grid() = " << p2.inside_grid() << std::endl; 
} 
関連する問題