Вам нужно использовать extern только тогда, когда вы объявляете переменную / функцию, и определяете переменную в одном из файлов cpp, которые включают заголовок.
Итак, что вы хотите сделать, это
test1.h
#pragma once
#include<iostream>
using namespace std;
extern int a;
extern void print();
test1.cpp
#include "test1.h"
int a = 745;
void print() {
cout << "hi "<< a <<endl;
}
test2.cpp
#include"test1.h"
int b = ++a;
int main()
{
cout << "hello a is " << b << endl;
print();
return 0;
}