2013-03-02 5 views
2

Обновление: я думаю, оно исправлено. Спасибо, парни!C++: ошибка: неверное использование квалифицированного имени

Я получаю сообщение об ошибке, и я просто не могу понять это. У меня есть этот код:

//A Structure with one variable and a constructor 
struct Structure{ 
    public: 
    int dataMember; 

    Structure(int param); 
}; 

//Implemented constructor 
Structure::Structure(int param){ 
    dataMember = param; 
} 

//A class (which I don't plan to instantiate), 
//that has a static object made from Structure inside of it 
class unInstantiatedClass{ 
    public: 
    static Structure structObject; 
}; 

//main(), where I try to put the implementation of the Structure from my class, 
//by calling its constructor 
int main(){ 
    //error on the line below 
    Structure unInstantiatedClass::structObject(5); 

    return 0; 
} 

На линии, которая говорит «Структура unInstantiatedClass :: structObject (5)», я получаю ошибку, которая гласит:

error: invalid use of qualified-name 'unInstantiatedClass::structObject' 

Я гугл этой ошибки и просмотрел несколько сообщений на форуме, но все проблемы кажутся разными. Я также пробовал googling «статический объект структуры внутри класса» и другие связанные фразы, но не нашел того, что, по-моему, действительно связано с моей проблемой.

Что я пытаюсь сделать здесь: Имейте класс, который я никогда не создавал. и Внутри этого класса есть статический объект, который имеет переменную, которая может быть установлена ​​через конструктор.

Любая помощь приветствуется. Благодарю.

ответ

0

Вы хотели бы использовать этот код:

UPDATE: Перемещенные инициализации статического члена в глобальном масштабе.

// In global scope, initialize the static member 
Structure unInstantiatedClass::structObject(5); 

int main(){ 
    return 0; 
} 
+0

Нет, это уже экземпляр, и он инициализирован, увидев, что это 'static' –

+0

У меня нет компилятора, но наверняка это даст ту же ошибку? Проблема в том, что определение не может быть внутри функции, и изменение стиля инициализации от прямого к копированию не будет иметь для этого никакого значения. –

+0

Согласен. Я считаю, что инициализация статического члена должна быть перенесена в глобальную область. – Tuxdude

7

Определение статического члена не может быть внутри функции:

class unInstantiatedClass{ 
    public: 
    static Structure structObject; 
}; 

Structure unInstantiatedClass::structObject(5); 

int main() { 
    // Do whatever the program should do 
} 
+0

Aha! Я думаю, это работает! Спасибо вам, и спасибо всем, кто дал ответы. –

2

Я думаю, что проблема в том, что структура unInstantiatedClass :: structObject (5); в пределах. Положите его.

+0

Да, это так. Спасибо! –

Смежные вопросы