By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
454,952 Members | 1,404 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 454,952 IT Pros & Developers. It's quick & easy.

reference to const static object variable

P: n/a
I have a const static object. What is the right syntax to get a
reference to the std::vector within the std::map variable?:

class MyObj
{
public:
...
std::map<std::string,
std::vector<std::string l_;
};

static MyObj obj;

int main()
{
...
const std::vector<std::string&regexList = obj.l_["key"]; //
compiler error
...
};

Nov 14 '08 #1
Share this Question
Share on Google+
5 Replies


P: n/a
On Fri, 14 Nov 2008 11:23:28 -0800, Bob Doe wrote:
I have a const static object. What is the right syntax to get a
reference to the std::vector within the std::map variable?:

class MyObj
{
public:
...
std::map<std::string,
std::vector<std::string l_;
};

static MyObj obj;

int main()
{
...
const std::vector<std::string&regexList = obj.l_["key"]; //
compiler error
...
};
Did you care to read the error message? What did it say?

--
OU
Remember 18th of June 2008, Democracy died that afternoon.
http://frapedia.se/wiki/Information_in_English
Nov 14 '08 #2

P: n/a
sorry,

The example should have been:

class MyObj
{
public:
MyObj()
{
std::vector<std::stringt;
t.push_back("zzz");
l_["a"] = t;
}

std::map<std::string,
std::vector<std::string l_;
};

const static MyObj obj;

int main()
{
const std::vector<std::string&regexList = obj.l_["key"];
}
-----
I want to maintain the const-ness of MyObj, and have read access to
the std::vector within std::map...

and the error message says:

passing `const
map<basic_string<char,string_char_traits<char>,__d efault_alloc_template<false,
0>
>,vector<basic_string<char,string_char_traits<char >,__default_alloc_template<false,
0>
>,allocator<basic_string<char,string_char_traits<c har>,__default_alloc_template<false,
0 >
>,less<basic_string<char,string_char_traits<char>, __default_alloc_template<false,
0
>,allocator<vector<basic_string<char,string_char_t raits<char>,__default_alloc_template<false,
0>
>,allocator<basic_string<char,string_char_traits<c har>,__default_alloc_template<false,
0 ' as `this' argument of `class
vector<basic_string<char,string_char_traits<char>, __default_alloc_template<false,
0>
>,allocator<basic_string<char,string_char_traits<c har>,__default_alloc_template<false,
0 &
map<basic_string<char,string_char_traits<char>,__d efault_alloc_template<false,
0>
>,vector<basic_string<char,string_char_traits<char >,__default_alloc_template<false,
0>
>,allocator<basic_string<char,string_char_traits<c har>,__default_alloc_template<false,
0 >
>,less<basic_string<char,string_char_traits<char>, __default_alloc_template<false,
0
>,allocator<vector<basic_string<char,string_char_t raits<char>,__default_alloc_template<false,
0>
>,allocator<basic_string<char,string_char_traits<c har>,__default_alloc_template<false,
0 ::operator [](const string &)' discards qualifiers
Which I don't understand.

const static MyObj obj;

On Nov 14, 12:30*pm, Obnoxious User <O...@127.0.0.1wrote:
On Fri, 14 Nov 2008 11:23:28 -0800, Bob Doe wrote:
I have a const static object. *What is the right syntax to get a
reference to the std::vector within the std::map variable?:
class MyObj
{
* *public:
* * *...
* * *std::map<std::string,
* * * * * * * * * std::vector<std::string l_;
};
*static MyObj obj;
int main()
{
* ...
* const std::vector<std::string&regexList = obj.l_["key"]; *//
compiler error
* ...
};

Did you care to read the error message? What did it say?

--
OU
Remember 18th of June 2008, Democracy died that afternoon.http://frapedia..se/wiki/Information_in_English
Nov 14 '08 #3

P: n/a
On Nov 14, 10:24*pm, Bob Doe <DumpForJ...@gmail.comwrote:
sorry,
The example should have been:
class MyObj
{
* *public:
* * * MyObj()
* * * {
* * * * *std::vector<std::stringt;
* * * * *t.push_back("zzz");
* * * * *l_["a"] = t;
* * * }
* * * std::map<std::string,
* * * * * * * *std::vector<std::string l_;
};
const static MyObj obj;
int main()
{
* *const std::vector<std::string&regexList = obj.l_["key"];
Have you looked at the documentation of std::map<>:operator[]?
What does it do?

Since it modifies the map, you can't use it on a const object.
}
I want to maintain the const-ness of MyObj, and have read
access to the std::vector within std::map...
Then operator[] isn't the function you want. Something like:
std::map< std::string, std::vector< std::string >
>::const_iterator
entry = obj.l_[ "key" ] ;
if ( entry != obj.l_.end() ) {
std::vector< std::string const&
regexList = entry->second ;
// ...
}

maybe. (Or maybe std::map isn't what you really want, except
buried deep in the implementation of something with a more
congenial interface.)

--
James Kanze (GABI Software) email:ja*********@gmail.com
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
Nov 14 '08 #4

P: n/a
On Fri, 14 Nov 2008 14:59:46 -0800, James Kanze wrote:
On Nov 14, 10:24Â*pm, Bob Doe <DumpForJ...@gmail.comwrote:
>sorry,
[snip]
>
>I want to maintain the const-ness of MyObj, and have read access to the
std::vector within std::map...

Then operator[] isn't the function you want. Something like:
std::map< std::string, std::vector< std::string >
>>::const_iterator
entry = obj.l_[ "key" ] ;
const_iterator entry = obj.find("key");
if ( entry != obj.l_.end() ) {
std::vector< std::string const&
regexList = entry->second ;
// ...
}
--
OU
Remember 18th of June 2008, Democracy died that afternoon.
http://frapedia.se/wiki/Information_in_English
Nov 15 '08 #5

P: n/a
On Nov 15, 9:11*am, Obnoxious User <O...@127.0.0.1wrote:
On Fri, 14 Nov 2008 14:59:46 -0800, James Kanze wrote:
On Nov 14, 10:24*pm, Bob Doe <DumpForJ...@gmail.comwrote:
sorry,
[snip]
I want to maintain the const-ness of MyObj, and have read
access to the std::vector within std::map...
Then operator[] isn't the function you want. *Something like:
* * std::map< std::string, std::vector< std::string >
>::const_iterator
* * * * * * * * * * * * entry = obj.l_[ "key"] ;
const_iterator entry = obj.find("key");
Yes, obviously.
* * if ( entry != obj.l_.end() ) {
* * * * std::vector< std::string const&
* * * * * * * * * * * * * * regexList = entry->second ;
* * * * // ...
* * }
--
James Kanze (GABI Software) email:ja*********@gmail.com
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
Nov 15 '08 #6

This discussion thread is closed

Replies have been disabled for this discussion.