C ++ noob - область видимости - PullRequest
2 голосов
/ 17 ноября 2011

У меня есть следующий класс C ++:

class Eamorr {
public:
        redispp::Connection conn;

        Eamorr(string& home, string& uuid)
        {
            //redispp::Connection conn("127.0.0.1", "6379", "password", false);   //this works, but is out of scope in put()...
            conn=new redispp::Connection("127.0.0.1", "6379", "password", false);   //this doesn't work ;(
        }
        put(){
            conn.set("hello", "world");
        }
        ...
}

Как видите, я хочу, чтобы conn был инициализирован в конструкторе и доступен в методе put().

Как я могу это сделать?

Заранее большое спасибо,

Ответы [ 2 ]

8 голосов
/ 17 ноября 2011

Для чего предназначен список инициализации члена:

 Eamorr(string& home, string& uuid) 
     : conn("127.0.0.1", "6379", "password", false) 
 {
    //constructor body!
 }

Синтаксис после : (и включая это) формирует список инициализации участника.Здесь можно инициализировать элементы, каждый из которых разделен запятой.

Вот подробный пример:

struct A
{
     int n;
     std::string s;
     B *pB;

     A() : n(100), s("some string"), pB(new B(n, s))
     {
        //ctor-body!
     }
};

Подробнее см.

0 голосов
/ 17 ноября 2011

Просто для расширения ответа Наваза.

На самом деле неправильно было то, что вы использовали new для переменной, которая не была указателем.Так как переменная conn не является указателем, вы могли бы написать:

Eamorr(string& home, string& uuid)
{
    conn = redispp::Connection("127.0.0.1", "6379", "password", false);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...