相关疑难解决方法(0)

与字符串(GCC)一起使用时对函数模板的未定义引用

我需要写一个模板函数replace_all在C++中,这将需要一个字符串,wstring的,glibmm :: ustring等,并更换所有出现searchsubjectreplace.

replace_all.cc

template < class T >
T replace_all(
        T const &search,
        T const &replace,
        T const &subject
) {
        T result;

        typename T::size_type done = 0;
        typename T::size_type pos;
        while ((pos = subject.find(search, done)) != T::npos) {
                result.append (subject, done, pos - done);
                result.append (replace);
                done = pos + search.size ();
        }
        result.append(subject, done, subject.max_size());
        return result;
}
Run Code Online (Sandbox Code Playgroud)

test.cc

#include <iostream>

template < class T >
T replace_all(
        T …
Run Code Online (Sandbox Code Playgroud)

c++ string gcc templates stl

3
推荐指数
2
解决办法
1万
查看次数

未定义的引用

可能重复:
C++模板,未定义的引用

我有一个非常简单的程序,由三个文件组成,它们从普通数组构建向量:

//create.hpp

#ifndef CREATE_HPP_
#define CREATE_HPP_

#include <vector>

using namespace std;

template<class T>
vector<T> create_list(T uarray[], size_t size);

#endif /* CREATE_HPP_ */
Run Code Online (Sandbox Code Playgroud)
//create.cpp

#include "create.hpp"

template<class T>
vector<T> create_list(T uarray[], size_t size){
    vector<T> ulist(uarray, uarray + size);
    return ulist;
}
Run Code Online (Sandbox Code Playgroud)
//main.cpp

#include <vector>
#include <iostream>

#include "create.hpp"

using namespace std;


int main(){
    char temp[] = { '/', '>' };
    vector<char> uvec = create_list<char>(temp, 2);

    vector<char>::iterator iter=uvec.begin();
    for(;iter != uvec.end();iter++){
        cout<<*iter<<endl;
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

构建过程如下:

g++ -O0 -g3 …
Run Code Online (Sandbox Code Playgroud)

c++ linker-errors build-error undefined-reference

1
推荐指数
1
解决办法
4839
查看次数