我正在尝试实现一个可变方法,但是当我尝试以下代码时,它无法编译:
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;
}
当我尝试调用方法时
addConfiguration (config1, config2)
编译器给出了以下错误:
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)
我认为我没有正确宣布该方法,但我不知道错误在哪里。
提前致谢!
答案 0 :(得分:0)
问题在于迈克说:你在标题中声明了函数模板,但在源文件中定义了它。声明和实施都需要保留在同一个翻译单元中。我已经把这个问题作为副本结束了,并提供了更全面的答案。