2012-04-15 2 views
2

Я пытаюсь написать C#, как собственность, так что я получил это:C++ статического члена данных анонимного типа класса

#include <iostream> 

class Timer 
{ 
public: 
    static class { 
    public: 
     operator int(){ return x;} 
    private: 
     int x; 
    }y; 
}; 
int main() 
{ 
    std::cout << Timer::y; 
    std::cin.get(); 
} 

И, наконец, я получил эту ошибку:

error LNK2001: unresolved external symbol 
"public: static class Timer::<unnamed-type-y>y> Timer::y" 

Я бы оценить если кто-то скажет мне, почему.

Так что это всего лишь объявление, это слишком плохо, могу ли я каким-то образом определить его, кроме определения y где-то еще, или инициализировать его, что мне просто не нравится, и не могу сделать это, не давая анонимному введите имя.

+1

Вы должны определить (а не просто объявить) y где-нибудь. –

+0

http://stackoverflow.com/questions/195207/unresolved-external-symbol-on-static-class-members –

ответ

0

Самое простое решение, которое я могу думать (хотя это вводит имя для безымянного класса):

#include <iostream> 

class Timer 
{ 
private: 
    class internal { 
    public: 
     operator int(){ return x;} 
    private: 
     int x; 
    }; 

public: 
    static internal y; 
}; 

Timer::internal Timer::y; 

int main() 
{ 
    std::cout << Timer::y; 
    std::cin.get(); 
} 

Кроме того, не пытайтесь писать что-нибудь «C# -как» в C++, он просто Безразлично» т работы. И я не вижу, как static смешивается с C# property.

Редактировать: вы можете даже отметить класс internal как private, поэтому сам класс не будет доступен извне класса. См. Обновленный код.

+1

@Mike, ну прокси-объекты в порядке, но вы можете легко назвать этот класс. Безвизовый тип - Зло (tm). – Griwes

0

Вы получаете эту ошибку, потому что вам нужно определить y где-нибудь, но вы только что объявили ее в определении класса. Объявление его может быть сложным, поскольку он не имеет именованного типа, и вы должны указывать тип при его объявлении. Но с C++ 11 вы можете использовать decltype для этого:

#include <iostream> 

class Timer{ 
public: 
    static class { 
    public: 
     operator int(){ return x;} 
    private: 
     int x; 
    } y; 
}; 

decltype(Timer::y) Timer::y; //You define y here 

int main(){ 
    std::cout << Timer::y; 
    std::cin.get(); 
} 
Смежные вопросы