在C++问题中实现变分法

Implementing variadic method in C++ issue

本文关键字:实现 C++ 问题      更新时间:2023-10-16

我试图实现一个可变方法,但当我尝试以下代码时,它不会编译:

配置.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

配置.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)

我认为我没有正确地声明该方法,但我不知道错误在哪里。

提前感谢!

问题正如Mike所说:您在头中声明函数模板,但在源文件中定义它。宣言和执行都需要放在同一个翻译单位。我已经用一个更全面的答案重复结束了这个问题。