LINUX.ORG.RU

История изменений

Исправление 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

Это ты совсем в лужу