OmgDatProblem
OmgDatProblem

Reputation: 21

Error with implement map within template c++

I need to use a map with various type within es int,int or char,int or char,char....

This is my c++ code:

#include <iostream>
#include<map>

using namespace std;

template< class A, class B >
class MyClass {

private:        
    std::map<A,B> DatMap;        

public:
    MyClass<K,T>(){
        DatMap = 0;
    }

    ~MyClass(){
        delete DatMap;
    }

    void DatInsert( A k ,B v ) {
        DatMap.insert( std::pair<A,B>( k, v) );
    }
};

int main(){
    DatMap<int,int> datmap1();
    diz1.DatInsert();
}

I found this error on: diz1.DatInsert(); line

the error is:

error: request for member ‘DatInsert’ in ‘datmap1’, which is of non-class type ‘DatMap<int, int>()’|

What am I doing wrong?

Upvotes: 0

Views: 53

Answers (3)

UpAndAdam
UpAndAdam

Reputation: 5477

Vlad and Jauncho make good points but have both missed another error

DatMap<int,int> datmap1(); isn't valid also because there is no public type DatMap exposed. The class is MyClass

You should be saying:

MyClass<int,int> datmap1; // or datmap1{};

Upvotes: 1

Vlad from Moscow
Vlad from Moscow

Reputation: 311126

There are several errors in the code.

For example identifiers K and T used in this code snippet

    MyClass<K,T>(){
    DatMap = 0;

    }

are undefined. Also the assignment DataMap by zero is invalid.

You shall not delete DatMap in destructor

    ~MyClass(){
    delete DatMap;
    }

because DatMap is not a pointer.

These both statements in main

DatMap<int,int> datmap1();
diz1.DatInsert();

are invalid. The first one is a declaration of a function that shall not be compiled. And the second statement contains call of member function DatInsert without arguments. You defined the function as having two parameters

void DatInsert(A k ,B v){
        DatMap.insert(std::pair<A,B>(k,v));
        }

so you need to provide two arguments.

Upvotes: 0

juanchopanza
juanchopanza

Reputation: 227608

This is a function declaration:

// functon datamap1, returns DatMap<int, int>
DatMap<int,int> datmap1();

You need

DatMap<int,int> datmap1;

Alternatively, this syntax is valid since C++11

DatMap<int,int> datmap1{};

Upvotes: 3

Related Questions