Рассмотрит followin определения простого класса -определения статической функции класса вне определения класса
// file A.h
#include <iostream>
class A {
public:
static int f();
static const int aa;
};
// file A.cpp
#include "a.h"
using namespace std;
const int A::aa = 10;
int A::f() {
return A::aa;
}
И это мой главный файл -
// main.cpp file
#include "a.h"
#include "b.h"
using namespace std;
const int A::aa = 100;
int A::f();
int main() {
cout << A::aa << "\n";
cout << A::f() << "\n";
}
Когда я пытаюсь скомпилировать main.cpp, то компилятор жалуется, что объявление A :: f() в main.cpp вне класса является объявлением, а не определением. Почему это? Я не намерен определять A :: f() в main.cpp. Он определен в A.cpp, и компоновщик должен связать объявление A :: f() в main.cpp с его определением в A.cpp. Поэтому я не понимаю, почему я получаю эту ошибку. Обратите внимание, что это ошибка компиляции.
Почему у вас есть эта линия? –
Где находится файл "b.h" – NinjaCoder
его не включает. Нашел проблему. – user236215