Класс X LNK2005 уже определен в Y.obj - PullRequest
0 голосов
/ 16 марта 2020

У меня есть стартовый проект, и мне нужно написать собственный распределитель и инструменты для диагностики c. Я создал класс Class, в котором у меня есть 2 метода для пользовательского распределителя void alloc() void dealloc() и для диагностики c tools void evaluate().
Теперь я объявил объект test типа Class в CustomAllocator.h и используйте 2 метода для выделения и освобождения памяти без проблем. Но когда я пытаюсь вызвать метод evaluate() в CustomAllocatorTest.cpp, я получил сообщение об ошибке компоновщика class Class test(?test@@3VClass@@A) already defined in CustomAllocatorTest.obj и LNK1169 one or more multiply defined symbols found.

Class.h

#pragma once
class Class
{
public:
    void alloc() { std::cout << "alloc"; }
    void dealloc() { std::cout << "dealloc"; }
    void evaluate() { std::cout << "evaluate"; }
};

CustomAllocator.h

#ifndef _CUSTOM_ALLOCATOR_H_
#define _CUSTOM_ALLOCATOR_H_

#define _CRTDBG_MAP_ALLOC
#include <crtdbg.h>
#include <stdlib.h>

#include "Class.h"
Class test;

#endif  // _CUSTOM_ALLOCATOR_H_

CustomAllocator. cpp (#include "stdafx.h" включает в себя "CustomAllocator.h")

#include "stdafx.h"

using namespace std;

int main()
{
  test.evaluate();
  return 0;
}

1 Ответ

1 голос
/ 16 марта 2020

в вашем файле CustomAllocator.h вы объявляете test в глобальной области видимости:

#ifndef _CUSTOM_ALLOCATOR_H_
#define _CUSTOM_ALLOCATOR_H_
#include "Class.h"

Class test; // <-- Declaration of test 

#endif 

Но ваш CustomAllocator.h включается много раз, во многих местах (в UseCustomAllocator.h и CustomAllocator.cpp) который сгенерирует ошибку already defined для переменной test.

Пожалуйста, посмотрите, как объявлять переменную externe globale здесь # Прагма не мешает определению нескольких переменных

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...