История изменений
Исправление
vertexua,
(текущая версия)
:
a.h
#pragma once
class Cookie{
public:
static int k;
};
int Cookie::k = 0;
b.h
#pragma once
int inc_b();
b.cc
#include "a.h"
#include "b.h"
int inc_b(){
return Cookie::k ++;
}
c.h
#pragma once
int inc_c();
c.cc
#include "a.h"
#include "c.h"
int inc_c(){
return Cookie::k ++;
}
main.cc
#include "a.h"
#include "b.h"
#include "c.h"
#include <iostream>
using namespace std;
int main(){
cout << "inc_b " << inc_b() << endl;
cout << "inc_c " << inc_c() << endl;
}
Конпеляю
$clang++ -c c.cc -o c.o
$clang++ -c b.cc -o b.o
$clang++ -c main.cc -o main.o
$clang++ *.o -o main
c.o:(.bss+0x0): multiple definition of `Cookie::k'
b.o:(.bss+0x0): first defined here
main.o:(.bss+0x0): multiple definition of `Cookie::k'
b.o:(.bss+0x0): first defined here
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Вот это ты имел ввиду?
а ещё вы неосилятор #pragma once
facepalm.cpp
Это ты совсем в лужу
Исправление
vertexua,
:
a.h
#pragma once
class Cookie{
public:
static int k;
};
int Cookie::k = 0;
b.h
#pragma once
int inc_b();
b.cc
#include "a.h"
#include "b.h"
int inc_b(){
return Cookie::k ++;
}
c.h
#pragma once
int inc_c();
c.cc
#include "a.h"
#include "c.h"
int inc_c(){
return Cookie::k ++;
}
#include "a.h"
#include "b.h"
#include "c.h"
#include <iostream>
using namespace std;
int main(){
cout << "inc_b " << inc_b() << endl;
cout << "inc_c " << inc_c() << endl;
}
Конпеляю
$clang++ -c c.cc -o c.o
$clang++ -c b.cc -o b.o
$clang++ -c main.cc -o main.o
$clang++ *.o -o main
c.o:(.bss+0x0): multiple definition of `Cookie::k'
b.o:(.bss+0x0): first defined here
main.o:(.bss+0x0): multiple definition of `Cookie::k'
b.o:(.bss+0x0): first defined here
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Вот это ты имел ввиду?
а ещё вы неосилятор #pragma once
facepalm.cpp
Это ты совсем в лужу
Исходная версия
vertexua,
:
a.h
#pragma once
class Cookie{
public:
static int k;
};
int Cookie::k = 0;
b.h
#pragma once
int inc_b();
b.cc
#include "a.h"
#include "b.h"
int inc_b(){
return Cookie::k ++;
}
c.h
#pragma once
int inc_c();
c.cc
#include "a.h"
#include "c.h"
int inc_c(){
return Cookie::k ++;
}
#include "a.h"
#include "b.h"
#include "c.h"
#include <iostream>
using namespace std;
int main(){
cout << "inc_b " << inc_b() << endl;
cout << "inc_c " << inc_c() << endl;
}
Конпеляю
$clang++ -c c.cc -o c.o
$clang++ -c b.cc -o b.o
$clang++ -c main.cc -o main.o
$clang++ *.o -o main
c.o:(.bss+0x0): multiple definition of `Cookie::k'
b.o:(.bss+0x0): first defined here
main.o:(.bss+0x0): multiple definition of `Cookie::k'
b.o:(.bss+0x0): first defined here
clang: error: linker command failed with exit code 1 (use -v to see invocation)
а ещё вы неосилятор #pragma once
facepalm.cpp
Это ты совсем в лужу