João Pires
João Pires

Reputation: 1007

Class Template in Header file giving me lots of errors

This following code:

main.cpp:

#include <iostream>
#include <list>
#include <map>
#include <string>

#include "core_table.h"

using std::cout;
using std::endl;

int main() {
    core_table<int, int> t;

    cout << sizeof(t) << endl;
    return 0;
}

core_table.h:

#ifndef CORE_TABLE_H
#define CORE_TABLE_H

template <typename key, typename value>
class core_table {
    std::list<key, value> l;
    std::map<key, value> m;
public:
};

#endif // !CORE_TABLE_H

is giving me this list of errors in Visual Studio 2017. I don't know how to solve it, since this is my first time trying to structure my code in multiple files.

Severity    Code    Description Project File    Line    Suppression State
Error   C2516   '_Alloc': is not a legal base class ali c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.10.24728\include\xmemory0    984 
Error   C2825   '_Alloc': must be a class or namespace when followed by '::'    ali c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.10.24728\include\xmemory0    659 
Error   C2510   '_Alloc': left of '::' must be a class/struct/union ali c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.10.24728\include\xmemory0    659 
Error   C3646   'value_type': unknown override specifier    ali c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.10.24728\include\xmemory0    659 
Error   C4430   missing type specifier - int assumed. Note: C++ does not support default-int    ali c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.10.24728\include\xmemory0    659 
Error   C2825   '_Ty': must be a class or namespace when followed by '::'   ali c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.10.24728\include\xmemory0    323 
Error   C2510   '_Ty': left of '::' must be a class/struct/union    ali c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.10.24728\include\xmemory0    323 
Error   C2143   syntax error: missing ';' before '*'    ali c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.10.24728\include\xmemory0    323 
Error   C4430   missing type specifier - int assumed. Note: C++ does not support default-int    ali c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.10.24728\include\xmemory0    323 
Error   C2238   unexpected token(s) preceding ';'   ali c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.10.24728\include\xmemory0    323 
Error   C2039   'type': is not a member of 'std::_Get_pointer_type<_Alloc,void>'    ali c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.10.24728\include\xmemory0    661 
Error   C3646   'pointer': unknown override specifier   ali c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.10.24728\include\xmemory0    662 
Error   C4430   missing type specifier - int assumed. Note: C++ does not support default-int    ali c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.10.24728\include\xmemory0    662 
Error   C2039   'type': is not a member of 'std::_Get_pointer_type<_Alloc,void>'    ali c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.10.24728\include\xmemory0    337 
Error   C3646   '_Ptrty': unknown override specifier    ali c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.10.24728\include\xmemory0    337 
Error   C4430   missing type specifier - int assumed. Note: C++ does not support default-int    ali c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.10.24728\include\xmemory0    337 
Error   C2825   '_Ty': must be a class or namespace when followed by '::'   ali c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.10.24728\include\xmemory0    338 
Error   C2510   '_Ty': left of '::' must be a class/struct/union    ali c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.10.24728\include\xmemory0    338 
Error   C3646   '_Valty': unknown override specifier    ali c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.10.24728\include\xmemory0    338 
Error   C4430   missing type specifier - int assumed. Note: C++ does not support default-int    ali c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.10.24728\include\xmemory0    338 
Error   C2065   '_Ptrty': undeclared identifier ali c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.10.24728\include\xmemory0    339 
Error   C2923   'std::pointer_traits': '_Ptrty' is not a valid template type argument for parameter '_Ty'   ali c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.10.24728\include\xmemory0    339 
Error   C4430   missing type specifier - int assumed. Note: C++ does not support default-int    ali c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.10.24728\include\xmemory0    339 
Error   C2146   syntax error: missing '>' before identifier '_Valty'    ali c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.10.24728\include\xmemory0    339 
Error   C2903   'rebind': symbol is neither a class template nor a function template    ali c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.10.24728\include\xmemory0    339 
Error   C2371   'std::_Get_const_pointer_type<_Alloc,void>::type': redefinition; different basic types  ali c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.10.24728\include\xmemory0    339 
Error   C2039   'type': is not a member of 'std::_Get_pointer_type<_Alloc,void>'    ali c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.10.24728\include\xmemory0    353 
Error   C3646   '_Ptrty': unknown override specifier    ali c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.10.24728\include\xmemory0    353 
Error   C4430   missing type specifier - int assumed. Note: C++ does not support default-int    ali c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.10.24728\include\xmemory0    353 
Error   C2065   '_Ptrty': undeclared identifier ali c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.10.24728\include\xmemory0    354 
Error   C2923   'std::pointer_traits': '_Ptrty' is not a valid template type argument for parameter '_Ty'   ali c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.10.24728\include\xmemory0    354 
Error   C2903   'rebind': symbol is neither a class template nor a function template    ali c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.10.24728\include\xmemory0    354 
Error   C2371   'std::_Get_void_pointer_type<_Alloc,void>::type': redefinition; different basic types   ali c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.10.24728\include\xmemory0    354 
Error   C2039   'type': is not a member of 'std::_Get_pointer_type<_Alloc,void>'    ali c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.10.24728\include\xmemory0    368 
Error   C3646   '_Ptrty': unknown override specifier    ali c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.10.24728\include\xmemory0    368 
Error   C4430   missing type specifier - int assumed. Note: C++ does not support default-int    ali c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.10.24728\include\xmemory0    368 
Error   C2065   '_Ptrty': undeclared identifier ali c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.10.24728\include\xmemory0    369 
Error   C2923   'std::pointer_traits': '_Ptrty' is not a valid template type argument for parameter '_Ty'   ali c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.10.24728\include\xmemory0    369 
Error   C2903   'rebind': symbol is neither a class template nor a function template    ali c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.10.24728\include\xmemory0    369 
Error   C2371   'std::_Get_const_void_pointer_type<_Alloc,void>::type': redefinition; different basic types ali c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.10.24728\include\xmemory0    369 
Error   C2039   'type': is not a member of 'std::_Get_pointer_type<_Alloc,void>'    ali c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.10.24728\include\xmemory0    383 
Error   C3646   '_Ptrty': unknown override specifier    ali c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.10.24728\include\xmemory0    383 
Error   C4430   missing type specifier - int assumed. Note: C++ does not support default-int    ali c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.10.24728\include\xmemory0    383 
Error   C2065   '_Ptrty': undeclared identifier ali c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.10.24728\include\xmemory0    384 
Error   C2923   'std::pointer_traits': '_Ptrty' is not a valid template type argument for parameter '_Ty'   ali c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.10.24728\include\xmemory0    384 
Error   C2955   'std::pointer_traits': use of class template requires template argument list    ali c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.10.24728\include\xmemory0    384 
Error   C2371   'std::_Get_difference_type<_Ty,void>::type': redefinition; different basic types    ali c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.10.24728\include\xmemory0    384 
Error   C3646   'allocate': unknown override specifier  ali c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.10.24728\include\xmemory0    688 
Error   C2065   '_Al': undeclared identifier    ali c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.10.24728\include\xmemory0    688 
Error   C2275   '_Alloc': illegal use of this type as an expression ali c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.10.24728\include\xmemory0    688 
Error   C2226   syntax error: unexpected type 'std::allocator_traits<_Alloc>::size_type'    ali c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.10.24728\include\xmemory0    688 
Error   C2334   unexpected token(s) preceding '{'; skipping apparent function body  ali c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.10.24728\include\xmemory0    689 
Error   C3646   'allocate': unknown override specifier  ali c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.10.24728\include\xmemory0    693 
Error   C2065   '_Al': undeclared identifier    ali c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.10.24728\include\xmemory0    693 
Error   C2275   '_Alloc': illegal use of this type as an expression ali c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.10.24728\include\xmemory0    693 
Error   C2226   syntax error: unexpected type 'std::allocator_traits<_Alloc>::size_type'    ali c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.10.24728\include\xmemory0    693 
Error   C2334   unexpected token(s) preceding '{'; skipping apparent function body  ali c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.10.24728\include\xmemory0    695 
Error   C2061   syntax error: identifier 'pointer'  ali c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.10.24728\include\xmemory0    700 
Error   C2039   'pointer': is not a member of 'std::allocator_traits<_Alloc>'   ali c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.10.24728\include\xmemory0    990 
Error   C3646   'pointer': unknown override specifier   ali c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.10.24728\include\xmemory0    990 
Error   C4430   missing type specifier - int assumed. Note: C++ does not support default-int    ali c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.10.24728\include\xmemory0    990 
Error   C2027   use of undefined type 'std::_Replace_first_parameter<_Other,_Ty>'   ali c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.10.24728\include\xmemory0    469 
Error   C3646   'type': unknown override specifier  ali c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.10.24728\include\xmemory0    469 
Error   C4430   missing type specifier - int assumed. Note: C++ does not support default-int    ali c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.10.24728\include\xmemory0    469 
Error   C2027   use of undefined type 'std::_Replace_first_parameter<_Other,_Ty>'   ali c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.10.24728\include\xmemory0    469 
Error   C2535   'std::list<key,value>::list(unsigned int,const int &)': member function already defined or declared ali c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.10.24728\include\list    923 

What am I doing wrong?

Upvotes: 0

Views: 1626

Answers (1)

SergeyA
SergeyA

Reputation: 62563

Second template argument to std::list should be an allocator, yet you gave it something else - your value, which is int.

As a result, compiler is complaining because int doesn't have any members which allocator should expose.

On a side note, you should make your include files self-sufficient, i.e. they should include all headers they need themselves.

Upvotes: 2

Related Questions