gpt4 book ai didi

c++ - C++ 程序上的文件依赖性和模板问题

转载 作者:行者123 更新时间:2023-11-28 01:05:49 34 4
gpt4 key购买 nike

<分区>

Possible Duplicates:
Templated function being reported as “undefined reference” during compilation
Why can templates only be implemented in the header file?

你好,我在 c++ 程序中遇到依赖关系问题,该问题仅在我使用模板时产生。显然,编译器无法为具体类型实例化模板,我不知道为什么。

假设我有这个库(我发现它的真实程序要大得多,但我认为这似乎重现了我原来的问题):

//temp.cpp file
#include "temp.hpp"

template <typename a>
void printVector(std::vector<a> xs) {
for_each(xs.begin(), xs.end(), [](a x) {std::cout << x << " ";});
}

void printDoubVector(std::vector<double> xs) {
for_each(xs.begin(), xs.end(), [](double x) {std::cout << x << " ";});
}

使用这个头文件:

#include <vector>
#include <algorithm>
#include <iostream>


template <typename a> void printVector(std::vector<a> xs);
void printDoubVector(std::vector<double> xs);

还有这个主文件:

#include "temp.hpp"

int main(){
std::vector<double> foo(10,1);
printVector(foo);
std::cout << std::endl;
}

当我用这个 makefile 编译它们时:

CC=g++-4.5
FLAGS = -std=gnu++0x -Wall

all: test

test: temp.o main.o
$(CC) $(FLAGS) $^ -o $@

%.o: %.cpp
$(CC) $(FLAGS) -c $^ -o $@

我有一个 undefined reference to 'void printVector<double>(std::vector<double, std::allocator<double> >)'错误。

当然,如果我这样做printDoubVector(foo);而不是 printVector(foo); ,编译正常。如果一切都在同一个文件中,它也会正常编译。我也尝试做 printVector<double>(foo);没有结果。显然编译器知道我想要一个 printVector<double> ,他就是找不到。 :(

我不明白这个问题。我之前在不同的文件中使用模板,编译时没有任何问题。 :( 然而,在这个级别上我应该知道一些非常基础的东西。:/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com