#pragma comment(lib, "libname.lib")
LIBS += -L[путь_к_библиотеке] -l[имя_библиотеки]
foo.o -lz bar.o // просматривает библиотеку 'z' после foo.o, но перед bar.o
void f(int); // всего лишь объявление. Нет `тела` функции
int main(){
f(42); // undefined reference to f(int)
}
void f(int) {
// тело функции
}
undefined reference to vtable for <имя_класса>
class C {
virtual void f(int);
};
void C::f(int) { // виртуальная функция-член вне определения класса// тело функции
}
void f(int) { // свободная функция, не устраняющая проблему// тело функции
}
// В заголовочном файле
namespace N {
void f(int);
};
// В файле реализации
void f(int) { // функция в глобальном пространстве имён, не устраняющая проблему// тело функции
}
namespace N {
void f(int) { // функция в нужном пространстве имён// тело функции
}
} // конец пространства имён
void f(const char*) { // const char* вместо int// тело функции
}
undefined reference to f(int)
template class T
struct C {
friend void f(C<T>); // объявляет *НЕ*шаблонную дружественную функцию
};
template class T // определяет шаблонную функцию
void f(C<T>) { }
int main() {
C<int> c;
f(c); // undefined reference to f(C<int>)
}
template class T
struct C {
template class V // добавили шаблонность для friend функцииfriend void f(CT);
};
struct S {
static int i;
};
int main() {
S s;
s.i = 42; // undefined reference to S::i
}
int S::i;
// unit.h
#pragma once
template class T
T f(T); // объявление шаблона без реализации
// unit.cpp
#include "unit.h"
template class T
T f(T t) { return t + t; } // реализация шаблона
undefined reference to
template
int f int(int); // явное инстанцирование для int
template
double f double (double); // явное инстанцирование для double
// main.cpp
#include "unit.h"
int main() {
f(2); // ok intf(1.5); // ok doublef('a'); // undefined reference to char f<char>(char)
}
struct B {
void virtual f();
};
struct D : B {
void f() {}
};
int main() {
D d;
}
struct B {
void virtual f() = 0;
};
// A.cpp
void f();
int main() {
f(); // undefined reference to f()
}
// B.cpp
static void f() {}
// B.cpp
namespace {
void f() {}
}
// B.cpp
inline void f() {}