[c++]ライブラリ導入でコンパイルエラーが起きる場合の原因

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
アバター
purin52002
記事: 235
登録日時: 4年前
連絡を取る:

[c++]ライブラリ導入でコンパイルエラーが起きる場合の原因

#1

投稿記事 by purin52002 » 3年前

こんにちは

ゲームエンジン「ue4」で機械学習ライブラリ「dlib」を使えないかと四苦八苦しています。
先日ようやくue4にdlibを入れることができたのですが(といってもヘッダをインクルードしてソースファイルをプロジェクトに追加するだけ^^;)、
dlib内のファイルでコンパイルエラーが出てしまいます。

dlibを入れる前は正常にコンパイルできていたので、dlibの追加が原因では?と睨んでいます。
以下にエラーが出た箇所を記します。

コード:

template <
        typename sbuf
        >
    class lzp_buffer_kernel_2 
    {
        /*!
            REQUIREMENTS ON sbuf
                sbuf is an implementation of sliding_buffer/sliding_buffer_kernel_abstract.h
                T == unsigned char

            INITIAL VALUE
                - buffer.size() == the size as defined by the constructor
                - table_size == the number of elements in the table3 and table4 arrays
                - for all i: buffer[i] == 0
                - for all i: table3[i] == buffer.size()
                - for all i: table4[i] == buffer.size()

            CONVENTION
                - table_size == the number of elements in the table3 and table4 arrays
                - size() == buffer.size()
                - operator[](i) == buffer[i]

                

                - last_element == buffer.size()-1

                
                This is LZP with an order-5-4-3 model with context confirmation.
                To save memory the order5 and order3 predictions exist in the same
                table, that is, table3.
        
        !*/

    public:

        explicit lzp_buffer_kernel_2 (
            unsigned long buffer_size           
        );

        virtual ~lzp_buffer_kernel_2 (
        );

        void clear(
        );

        inline void add (
            unsigned char symbol
        );

        inline unsigned long predict_match (
            unsigned long& index
        );

        inline unsigned long size (
        ) const;

        inline unsigned char operator[] (
            unsigned long index
        ) const;

    private:

        inline bool verify (
            unsigned long index
        ) const
        /*!
            ensures
                - returns true if buffer[index]'s context matches the current context
        !*/
        { 
            if (index+3 < buffer.size())
            {
                if (buffer[0] != buffer[index+1])
                    return false;
                if (buffer[1] != buffer[index+2])
                    return false;
                if (buffer[2] != buffer[index+3])
                    return false;
                return true;
            }
            else
            {
                // just call this a match
                return true;
            }
        }


        sbuf buffer;        
        unsigned long* table3;
        unsigned long* table4;
        unsigned long last_element;
        const unsigned long table_size;

        // restricted functions
        lzp_buffer_kernel_2(const lzp_buffer_kernel_2<sbuf>&);        // copy constructor
        lzp_buffer_kernel_2<sbuf>& operator=(const lzp_buffer_kernel_2<sbuf>&);    // assignment operator

    };      
・エラー箇所
  63行目:型 'bool' は不要です。
  63行目:'{' の前に予期しないトークンがありました。関数の本体は無視されます
  70行目:型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
  70行目:構文エラー: '{'
  70行目:'{' の前に予期しないトークンがありました。関数の本体は無視されます

inline bool verify関数でエラーが起きているようなのですが原因がわかりません。(こいつだけヘッダ内で定義されてるから?)

[hr]
ライブラリの追加によりライブラリ内のファイルでエラーが起きてしまう原因はなんでしょうか?

似たような経験がある方で原因がわかる方はぜひご教授ください<(_ _)>
解決策も一緒に教えていただけるとよりいっそう喜びます^p^
c++初心者を自負しています。
質問者さんには今後私にプログラミングを教えてくれるようにやさしく丁寧に教えるつもりです。ぎぶあんどていく^p^
回答者さんには精一杯感謝します。ぎぶおんりー^p^

ISLe
記事: 2648
登録日時: 10年前
連絡を取る:

Re: [c++]ライブラリ導入でコンパイルエラーが起きる場合の原因

#2

投稿記事 by ISLe » 3年前

ヘッダファイルを混在すると、defineマクロによって予期しない置換が発生することがあります。

この場合、これより前にインクルードされたヘッダファイルのどこかにverifyというマクロが定義されていると思われます。

アバター
purin52002
記事: 235
登録日時: 4年前
連絡を取る:

Re: [c++]ライブラリ導入でコンパイルエラーが起きる場合の原因

#3

投稿記事 by purin52002 » 3年前

神様仏様ISLe様

verifyを#undefしたところ見事にコンパイルが通りました_(:3 」∠ )_

ありがとうございました<(_ _)>
c++初心者を自負しています。
質問者さんには今後私にプログラミングを教えてくれるようにやさしく丁寧に教えるつもりです。ぎぶあんどていく^p^
回答者さんには精一杯感謝します。ぎぶおんりー^p^

返信

“C言語何でも質問掲示板” へ戻る