2011-11-17 1 views
2

У меня есть следующий C++ класс: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().

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

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

ответ

8

Это то, что член-инициализацию-лист для:

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

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

Вот развернутый пример:

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

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

Более подробно см эти:

+1

Это работает! Спасибо огромное! – Eamorr

0

Просто расширить на Наваз ответ.

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

Eamorr(string& home, string& uuid) 
{ 
    conn = redispp::Connection("127.0.0.1", "6379", "password", false); 
}