在C ++问题中实现可变方法

时间:2014-10-30 15:14:28

标签: c++ variadic

我正在尝试实现一个可变方法,但是当我尝试以下代码时,它无法编译:

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)

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

提前致谢!

1 个答案:

答案 0 :(得分:0)

问题在于迈克说:你在标题中声明了函数模板,但在源文件中定义了它。声明和实施都需要保留在同一个翻译单元中。我已经把这个问题作为副本结束了,并提供了更全面的答案。