473,395 Members | 1,720 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,395 software developers and data experts.

Compile error.

This is an simple map, just an exercise. Who can help me fix this
compile issue?Thanks in advance.
#include <string>
#include <vector>
#include <iostream>
using std::vector;
using std::string;
using std::cout;
using std::endl;

template<typename T>
class Map{
template<typename U>
struct Pair{
string name;
U val;
Pair(string n ="", U v):name(n),val(v){}
};
vector<Pair<T vec;
Map(const Map&);
Map& operator=(const Map&);
typedef vector<Pair<T::const_iterator CIT;
typedef vector<Pair<T::iterator IT;
public:
Map(){}
double& operator[](const string&);
void print_all()const;
};
template<typename T>
T& Map<T>::operator[](const string& name)
{
IT it = vec.begin();
IT end = vec.end();
for(; it != end; ++it){
if(it->name == name) return it->val;
}
vec.push_back(Pair<T>(name,T()));
return vec.back().val;
}
template<typename T>
void Map<T>::print_all()const
{
for(CIT p = vec.begin(); p != vec.end();++p){
cout << p->name << ": " << p->val << endl;
}
}
int main()
{
Map<intm;
m["zhu"] = 100;
m["li"] = 200;
m.print_all();
}
-*- mode: compilation; default-directory: "e:/tcplex/p2_ch13/" -*-
Compilation started at Sat Nov 15 21:42:28

g++ 13.8.cpp
13.8.cpp:20: error: type `std::vector<Map<T>::Pair<T>,
std::allocator<Map<T>::Pair<T >' is not derived from type `Map<T>'
13.8.cpp:20: error: ISO C++ forbids declaration of `const_iterator'
with no type
13.8.cpp:20: error: expected `;' before "CIT"
13.8.cpp:21: error: type `std::vector<Map<T>::Pair<T>,
std::allocator<Map<T>::Pair<T >' is not derived from type `Map<T>'
13.8.cpp:21: error: ISO C++ forbids declaration of `iterator' with no
type
13.8.cpp:21: error: expected `;' before "IT"
13.8.cpp:29: error: prototype for `T& Map<T>::operator[](const
std::string&)' does not match any in class `Map<T>'
13.8.cpp:24: error: candidate is: double& Map<T>::operator[](const
std::string&)
13.8.cpp:29: error: template definition of non-template `T&
Map<T>::operator[](const std::string&)'
13.8.cpp: In member function `T& Map<T>::operator[](const
std::string&)':
13.8.cpp:30: error: `IT' was not declared in this scope
13.8.cpp:30: error: expected `;' before "it"
13.8.cpp:31: error: expected `;' before "end"
13.8.cpp:32: error: `it' was not declared in this scope
13.8.cpp:32: error: `end' was not declared in this scope
13.8.cpp: In member function `void Map<T>::print_all() const':
13.8.cpp:41: error: `CIT' was not declared in this scope
13.8.cpp:41: error: expected `;' before "p"
13.8.cpp:41: error: `p' was not declared in this scope

Compilation exited abnormally with code 1 at Sat Nov 15 21:42:28


Nov 15 '08 #1
3 3972
On 11ÔÂ15ÈÕ, ÏÂÎç9ʱ43·Ö, Hill <zhubi...@gmail.com>wrote:
This is an simple map, just an exercise. Who can help me fix this
compile issue?Thanks in advance.
#include <string>
#include <vector>
#include <iostream>
using std::vector;
using std::string;
using std::cout;
using std::endl;

template<typename T>
class Map{
template<typename U>
struct Pair{
string name;
U val;
Pair(string n ="", U v):name(n),val(v){}
};
vector<Pair<T vec;
Map(const Map&);
Map& operator=(const Map&);
typedef vector<Pair<T::const_iterator CIT;
typedef vector<Pair<T::iterator IT;
const_iterator is a dependent type here,
try
typedef typename vector<Pair<T::const_iterator CIT;
typedef typename vector<Pair<T::iterator IT;
public:
Map(){}
double& operator[](const string&);
void print_all()const;};

template<typename T>
T& Map<T>::operator[](const string& name)
{
IT it = vec.begin();
IT end = vec.end();
for(; it != end; ++it){
if(it->name == name) return it->val;
}
vec.push_back(Pair<T>(name,T()));
return vec.back().val;}

template<typename T>
void Map<T>::print_all()const
{
for(CIT p = vec.begin(); p != vec.end();++p){
cout << p->name << ": " << p->val << endl;
}}

int main()
{
Map<intm;
m["zhu"] = 100;
m["li"] = 200;
m.print_all();

}

-*- mode: compilation; default-directory: "e:/tcplex/p2_ch13/" -*-
Compilation started at Sat Nov 15 21:42:28

g++ 13.8.cpp
13.8.cpp:20: error: type `std::vector<Map<T>::Pair<T>,
std::allocator<Map<T>::Pair<T >' is not derived from type `Map<T>'
13.8.cpp:20: error: ISO C++ forbids declaration of `const_iterator'
with no type
13.8.cpp:20: error: expected `;' before "CIT"
13.8.cpp:21: error: type `std::vector<Map<T>::Pair<T>,
std::allocator<Map<T>::Pair<T >' is not derived from type `Map<T>'
13.8.cpp:21: error: ISO C++ forbids declaration of `iterator' with no
type
13.8.cpp:21: error: expected `;' before "IT"
13.8.cpp:29: error: prototype for `T& Map<T>::operator[](const
std::string&)' does not match any in class `Map<T>'
13.8.cpp:24: error: candidate is: double& Map<T>::operator[](const
std::string&)
13.8.cpp:29: error: template definition of non-template `T&
Map<T>::operator[](const std::string&)'
13.8.cpp: In member function `T& Map<T>::operator[](const
std::string&)':
13.8.cpp:30: error: `IT' was not declared in this scope
13.8.cpp:30: error: expected `;' before "it"
13.8.cpp:31: error: expected `;' before "end"
13.8.cpp:32: error: `it' was not declared in this scope
13.8.cpp:32: error: `end' was not declared in this scope
13.8.cpp: In member function `void Map<T>::print_all() const':
13.8.cpp:41: error: `CIT' was not declared in this scope
13.8.cpp:41: error: expected `;' before "p"
13.8.cpp:41: error: `p' was not declared in this scope

Compilation exited abnormally with code 1 at Sat Nov 15 21:42:28
Nov 15 '08 #2
On 11ÔÂ15ÈÕ, ÏÂÎç10ʱ54·Ö, Barry <dhb2...@gmail.comwrote:
On 11ÔÂ15ÈÕ, ÏÂÎç9ʱ43·Ö, Hill <zhubi...@gmail.comwrote:
This is an simple map, just an exercise. Who can help me fix this
compile issue?Thanks in advance.
#include <string>
#include <vector>
#include <iostream>
using std::vector;
using std::string;
using std::cout;
using std::endl;
template<typename T>
class Map{
template<typename U>
struct Pair{
string name;
U val;
Pair(string n ="", U v):name(n),val(v){}
};
vector<Pair<T vec;
Map(const Map&);
Map& operator=(const Map&);
typedef vector<Pair<T::const_iterator CIT;
typedef vector<Pair<T::iterator IT;

const_iterator is a dependent type here,
try
typedef typename vector<Pair<T::const_iterator CIT;
typedef typename vector<Pair<T::iterator IT;
public:
Map(){}
double& operator[](const string&);
void print_all()const;};
template<typename T>
T& Map<T>::operator[](const string& name)
{
IT it = vec.begin();
IT end = vec.end();
for(; it != end; ++it){
if(it->name == name) return it->val;
}
vec.push_back(Pair<T>(name,T()));
return vec.back().val;}
template<typename T>
void Map<T>::print_all()const
{
for(CIT p = vec.begin(); p != vec.end();++p){
cout << p->name << ": " << p->val << endl;
}}
int main()
{
Map<intm;
m["zhu"] = 100;
m["li"] = 200;
m.print_all();
}
-*- mode: compilation; default-directory: "e:/tcplex/p2_ch13/" -*-
Compilation started at Sat Nov 15 21:42:28
g++ 13.8.cpp
13.8.cpp:20: error: type `std::vector<Map<T>::Pair<T>,
std::allocator<Map<T>::Pair<T >' is not derived from type `Map<T>'
13.8.cpp:20: error: ISO C++ forbids declaration of `const_iterator'
with no type
13.8.cpp:20: error: expected `;' before "CIT"
13.8.cpp:21: error: type `std::vector<Map<T>::Pair<T>,
std::allocator<Map<T>::Pair<T >' is not derived from type `Map<T>'
13.8.cpp:21: error: ISO C++ forbids declaration of `iterator' with no
type
13.8.cpp:21: error: expected `;' before "IT"
13.8.cpp:29: error: prototype for `T& Map<T>::operator[](const
std::string&)' does not match any in class `Map<T>'
13.8.cpp:24: error: candidate is: double& Map<T>::operator[](const
std::string&)
13.8.cpp:29: error: template definition of non-template `T&
Map<T>::operator[](const std::string&)'
13.8.cpp: In member function `T& Map<T>::operator[](const
std::string&)':
13.8.cpp:30: error: `IT' was not declared in this scope
13.8.cpp:30: error: expected `;' before "it"
13.8.cpp:31: error: expected `;' before "end"
13.8.cpp:32: error: `it' was not declared in this scope
13.8.cpp:32: error: `end' was not declared in this scope
13.8.cpp: In member function `void Map<T>::print_all() const':
13.8.cpp:41: error: `CIT' was not declared in this scope
13.8.cpp:41: error: expected `;' before "p"
13.8.cpp:41: error: `p' was not declared in this scope
Compilation exited abnormally with code 1 at Sat Nov 15 21:42:28

Thanks very much.
But now i upgrade the code to let it can hold types without default
constructor. But caught in another error:
#include <string>
#include <vector>
#include <iostream>
using std::vector;
using std::string;
using std::cout;
using std::endl;
using std::ostream;

template<typename T>
struct Aligner{
union{
long double long_double_;
long long_;
void (*simple_function_ptr)();
};
};

template<typename T>
class Map{
template<typename U>
struct Pair{
string name;
union{
char raw_mem[sizeof(U)];
Aligner<Udummy;
}val;
Pair(string n = ""):name(n){}

Pair& operator=(const U& v){
new(val.raw_mem) U(v);
return *this;
}
};
vector<Pair<T vec;
Map(const Map&);
Map& operator=(const Map&);
typedef typename vector<Pair<T::const_iterator CIT;
typedef typename vector<Pair<T::iterator IT;
public:
Map(){}
Pair<T>& operator[](const string&);
void print_all()const;
};
template<typename T>
Pair<T>& Map<T>::operator[](const string&
name)////////////////////////////line 46
{
IT it = vec.begin();
IT end = vec.end();
for(; it != end; ++it){
if(it->name == name) return *it;
}
vec.push_back(Pair<T>(name));
return vec.back();
}
template<typename T>
void Map<T>::print_all()const
{
for(CIT p = vec.begin(); p != vec.end();++p){
cout << p->name << ": " << *(T*)(&p->val.raw_mem[0]) << endl;
}
}
struct stu{
string name;
string id;
stu(string n, string i):name(n), id(i){}
//stu(){}
};
ostream& operator<<(ostream& os, const stu& s)
{
return os << " Name: " << s.name << " Id: " << s.id ;
}

int main()
{
Map<stum;
m["first"] = stu("Zhubicen","011062");
m.print_all();
}

-*- mode: compilation; default-directory: "z:/tcplex/p2_ch13/" -*-
Compilation started at Sun Nov 16 19:33:03

g++ 13.8.cpp
13.8.cpp:46: error: expected constructor, destructor, or type
conversion before '<' token

Compilation exited abnormally with code 1 at Sun Nov 16 19:33:03



Nov 16 '08 #3
On Nov 15, 6:43 pm, Hill <zhubi...@gmail.comwrote:
This is an simple map, just an exercise. Who can help me fix this
compile issue?Thanks in advance.
#include <string>
#include <vector>
#include <iostream>
using std::vector;
using std::string;
using std::cout;
using std::endl;

template<typename T>
class Map{
template<typename U>
struct Pair{
string name;
U val;
Pair(string n ="", U v):name(n),val(v){}
};
vector<Pair<T vec;
Map(const Map&);
Map& operator=(const Map&);
typedef vector<Pair<T::const_iterator CIT;
typedef vector<Pair<T::iterator IT;
public:
Map(){}
double& operator[](const string&);
void print_all()const;};

template<typename T>
T& Map<T>::operator[](const string& name)
{
IT it = vec.begin();
IT end = vec.end();
for(; it != end; ++it){
if(it->name == name) return it->val;
}
vec.push_back(Pair<T>(name,T()));
return vec.back().val;}

template<typename T>
void Map<T>::print_all()const
{
for(CIT p = vec.begin(); p != vec.end();++p){
cout << p->name << ": " << p->val << endl;
}}

int main()
{
Map<intm;
m["zhu"] = 100;
m["li"] = 200;
m.print_all();

}

-*- mode: compilation; default-directory: "e:/tcplex/p2_ch13/" -*-
Compilation started at Sat Nov 15 21:42:28

g++ 13.8.cpp
13.8.cpp:20: error: type `std::vector<Map<T>::Pair<T>,
std::allocator<Map<T>::Pair<T >' is not derived from type `Map<T>'
13.8.cpp:20: error: ISO C++ forbids declaration of `const_iterator'
with no type
13.8.cpp:20: error: expected `;' before "CIT"
13.8.cpp:21: error: type `std::vector<Map<T>::Pair<T>,
std::allocator<Map<T>::Pair<T >' is not derived from type `Map<T>'
13.8.cpp:21: error: ISO C++ forbids declaration of `iterator' with no
type
13.8.cpp:21: error: expected `;' before "IT"
13.8.cpp:29: error: prototype for `T& Map<T>::operator[](const
std::string&)' does not match any in class `Map<T>'
13.8.cpp:24: error: candidate is: double& Map<T>::operator[](const
std::string&)
13.8.cpp:29: error: template definition of non-template `T&
Map<T>::operator[](const std::string&)'
13.8.cpp: In member function `T& Map<T>::operator[](const
std::string&)':
13.8.cpp:30: error: `IT' was not declared in this scope
13.8.cpp:30: error: expected `;' before "it"
13.8.cpp:31: error: expected `;' before "end"
13.8.cpp:32: error: `it' was not declared in this scope
13.8.cpp:32: error: `end' was not declared in this scope
13.8.cpp: In member function `void Map<T>::print_all() const':
13.8.cpp:41: error: `CIT' was not declared in this scope
13.8.cpp:41: error: expected `;' before "p"
13.8.cpp:41: error: `p' was not declared in this scope

Compilation exited abnormally with code 1 at Sat Nov 15 21:42:28
In your code if type U is not specially treated than type T as well as
it is directly dependent on type T then why did you introduce type U.
Better to remove it.

template<typename T>
class Map{
struct Pair{
string name;
T val;
Pair(string n ="", U v):name(n),val(v){}
};
vector<Pairvec;
Pair(string n ="", U v)
In this definition you're providing default argument from left side
which is not acceptable at all according to C++.
typedef vector<Pair<T::const_iterator CIT;
In this statement you're missing typename keyword. Use the following
statement
typedef typename vector<Pair<T::const_iterator CIT;
double& operator[](const string&);
Why return type is double???

Check all these things and your compilation error will be removed.
--
Daya
Nov 17 '08 #4

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

4
by: Danny Boelens | last post by:
Hi all, today I ran into a compile error after a compiler upgrade. I made a small example to demonstrate my compile error: template<typename T1, typename T2> class A {}; class B
5
by: Carmine Cairo | last post by:
Hi, I'm working on a project and today I've note a little problem during the compile fase. Here a little piece of code: // 1st version welldone = 0; size = p->getSize(); backbone = new...
5
by: Brice Prunier | last post by:
Here under 4 schemas i'm working with ( it may be long: sorry...) The context is the following : Resident.xsd imports Person.xsd and includes Common.xsd ( anonimous schema: no TargetNamespace )...
10
by: Chris LaJoie | last post by:
Our company has been developing a program in C# for some time now, and we haven't had any problems with it, but just last night something cropped up that has me, and everyone else, stumped. I...
6
by: Thomas Connolly | last post by:
I have 2 pages referencing the same codebehind file in my project. Originally the pages referenced separate code behind files. Once I changed the reference to the same file, everything worked...
0
by: Jim Heavey | last post by:
Internal Compiler Error: stage 'BEGIN' Hello, I had an application which was working just fine and I decided to modify all database access within the application to utilizie a new Namespace that I...
9
by: ThunderMusic | last post by:
Hi, I'd like to create a compile time error in my class... maybe there's a way already built in in the framework so I can achieve what I want... I have 2 constructors in my class. One of them...
4
by: tony | last post by:
Hello! My question is about calling this method CollectData below but I get a compile error that I shouldn't have because the type parameter is correct. The compile error is the following:...
5
by: wong_powah | last post by:
#include <vector> #include <iostream> using std::cout; using std::vector; enum {DATASIZE = 20}; typedef unsigned char data_t;
2
by: BruceWho | last post by:
I downloaded boost1.35.0 and built it with following command: bjam --toolset=msvc-7.1 --variant=release --threading=multi -- link=shared --with-system stage and it failed to compile, error...
0
by: Charles Arthur | last post by:
How do i turn on java script on a villaon, callus and itel keypad mobile phone
0
by: ryjfgjl | last post by:
If we have dozens or hundreds of excel to import into the database, if we use the excel import function provided by database editors such as navicat, it will be extremely tedious and time-consuming...
0
by: ryjfgjl | last post by:
In our work, we often receive Excel tables with data in the same format. If we want to analyze these data, it can be difficult to analyze them because the data is spread across multiple Excel files...
0
by: emmanuelkatto | last post by:
Hi All, I am Emmanuel katto from Uganda. I want to ask what challenges you've faced while migrating a website to cloud. Please let me know. Thanks! Emmanuel
0
BarryA
by: BarryA | last post by:
What are the essential steps and strategies outlined in the Data Structures and Algorithms (DSA) roadmap for aspiring data scientists? How can individuals effectively utilize this roadmap to progress...
0
by: Hystou | last post by:
There are some requirements for setting up RAID: 1. The motherboard and BIOS support RAID configuration. 2. The motherboard has 2 or more available SATA protocol SSD/HDD slots (including MSATA, M.2...
0
by: Hystou | last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can...
0
jinu1996
by: jinu1996 | last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven...
0
by: Hystou | last post by:
Overview: Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.