9

volatile をクラス オブジェクトに使用できますか? お気に入り:

volatile Myclass className;

問題は、何らかのメソッドが呼び出されたときにどこでもコンパイルされないことです。エラーは次のように述べています: error C2662: 'function' : cannot convert 'this' pointer from 'volatile MyClass' to 'MyCLass &'

ここで何が問題で、どうすれば解決できますか?

編集:

class Queue {
            private:
                struct Data *data;
                int amount;
                int size;
            public:
                Queue ();
                ~Queue ();
                bool volatile push(struct Data element);
                bool volatile pop(struct Data *element);
                void volatile cleanUp();
            };
    .....
    volatile Queue dataIn;

        .....

    EnterCriticalSection(&CriticalSection);
    dataIn.push(element);
    LeaveCriticalSection(&CriticalSection);
4

4 に答える 4

19

はい、できますが、(キーワードvolatileと同様に)宣言されたメンバー関数しか呼び出すことができません。const例えば:

 struct foo {
    void a() volatile;
    void b();
 };

 volatile foo f;
 f.a(); // ok
 f.b(); // not ok

コードに基づいて編集します。

bool volatile push(struct Data element);

(= )を返すメンバー関数を宣言します。あなたがしたいvolatilebool volatilevolatile bool

bool push(struct Data element) volatile;
于 2010-06-20T04:40:16.890 に答える
7

私は彼が言うつもりだったと思います

            bool push(struct Data element) volatile;

それ以外の

            bool volatile push(struct Data element);

こちらもご覧くださいhttp://www.devx.com/tips/Tip/13671

于 2010-06-20T05:58:25.640 に答える
4

C ++文法では、「volatile」と「const」は「CV修飾子」と呼ばれます。つまり、構文の観点からは、「volatile」は「const」とまったく同じように機能します。すべての「volatile」を「const」に置き換えると、コードがコンパイルされる理由を理解できます。

于 2012-08-07T05:01:15.950 に答える
3

うん。使えます。変更されたコードを参照してください。私はそれが今うまくいくことを願っています。

class Queue {
            private:
                struct Data *data;
                int amount;
                int size;
            public:
                Queue ();
                ~Queue ();
                bool push(struct Data element) volatile;
                bool pop(struct Data *element) volatile;
                void cleanUp() volatile;
            };
.....
volatile Queue dataIn;

    .....

EnterCriticalSection(&CriticalSection);
dataIn.push(element);
LeaveCriticalSection(&CriticalSection);
于 2015-12-28T10:28:38.447 に答える