I'm trying to implement a variadic method but when I try the following code it doesn't compile:
Configurations.h
#ifndef Test_Configurations_h
#define Test_Configurations_h
#include <vector>
class Configuration
{
public:
Configuration(){}
int someData;
};
class Configurations
{
public:
void addConfiguration (Configuration config);
template<typename... Args>
void addConfiguration (Configuration first, Args... args);
private:
std::vector<Configuration> _configs;
};
#endif
Configurations.cpp
#include "Configurations.h"
void Configurations::addConfiguration (Configuration config)
{
// do something
}
template<typename... Args>
void Configurations::addConfiguration (Configuration first, Args... args)
{
// Do something
}
main.cpp
#include <iostream>
#include "Configurations.h"
int main(int argc, const char * argv[]) {
Configuration c1;
Configuration c2;
Configurations configurations;
configurations.addConfiguration(c1, c2);
return 0;
}
When I try to call the method
addConfiguration (config1, config2)
The compiler give me the following error:
Undefined symbols for architecture x86_64:
"void Configurations::addConfiguration<Configuration>(Configuration, Configuration)", referenced from:
_main in main.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
I think that I'm not declaring properly the method, but I don't know where is the error.
Thanks in advance!