Проблема С Классом

  • Автор темы Автор темы FeDoS
  • Дата начала Дата начала
F

FeDoS

Здравствуйте!
Пытаюсь объявить класс в отдельном файле, но при компиляции получаю ошибку.
C++:
//main.cpp
#include "test.h"
#include <iostream>
int main()
{
Test_class test;
test.message();
test.message2();
test.message3();
system("pause");
}

C++:
//test.cpp
#include <iostream>
using namespace std;
#include "test.h"

void Test_class::message()
{
cout << "Message number 1" << endl;
}

void Test_class::message2()
{
cout << "Message number 2" << endl;
}

void Test_class::message3()
{
cout << "Message number 3" << endl;
}

C++:
//test.h
class Test_class
{
public:
void message();
void message2();
void message3();
};
Компилирую в dev c++
Ошибка:
multiple definition of `Test_class::message()'
А если сделать в таком варианте всё работает:
C++:
//main.cpp
#include "test.h"
#include <iostream>

int main()
{
Test_class test;
test.message();
test.message2();
test.message3();
system("pause");
}

C++:
//test.h
#include <iostream>
using namespace std;

class Test_class
{
public:
void message()
{
cout << "Message number 1" << endl;
}
void message2()
{
cout << "Message number 2" << endl;
}
void message3()
{
cout << "Message number 3" << endl;
}
};
 
так во втрорм варианте у тебя класс и так в отдельном файле.
в VS эти 3 файла будут работать
 
Whatka, вы правы, в VS проект собирается.
Проблема решилась, но причина так и осталась для меня загадкой.
Я создал новый проект, но класс и методы писал не вручную, а добавил их на вкладке классы и получил код:
C++:
//main.cpp
#include <conio.h>
#include "test_class.h"
#include <iostream>

using namespace std;

int main()
{
Test_class test;
test.message();
test.message2();
test.message3();
system("pause");
}
C++:
//test_class.cpp
// Class automatically generated by Dev-C++ New Class wizard

#include "test_class.h" // class's header file
#include <iostream>

using namespace std;

// No description
void Test_class::message()
{
cout << "Message number 1" << endl;
}

// No description
void Test_class::message2()
{
cout << "Message number 2" << endl;
}

// No description
void Test_class::message3()
{
cout << "Message number 3" << endl;
}
C++:
//test_class.h
// Class automatically generated by Dev-C++ New Class wizard

#ifndef TEST_CLASS_H
#define TEST_CLASS_H

/*
* No description
*/
class Test_class
{
public:
// No description
void message3();
// No description
void message2();
// No description
void message();
};
#endif // TEST_CLASS_H
 
обрати внимание на:
Код:
#ifndef TEST_CLASS_H
#define TEST_CLASS_H

Добавлено: хотя, можно и не обращать внимание )
первый код тоже верный.
multiple definition вываливается если что-то несколько раз описывается, это может быть, например, если вы несколько раз включите один и тот же хедер в одну единицу трансляции (это случается чуть чаще чем постоянно в проектах чуть больше вашего), и директива #ifndef как в вашем случае или #pragma once (лучше используйте #ifndef ..) спасают от этого. Но у вас и в первом посте нет множественного включения хедера, там все верно, вроде бы.
 
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab

🚀 Первый раз на Codeby?
Гайд для новичков: что делать в первые 15 минут, ключевые разделы, правила
Начать здесь →
🔴 Свежие CVE, 0-day и инциденты
То, о чём ChatGPT ещё не знает — обсуждаем в реальном времени
Threat Intel →
💼 Вакансии и заказы в ИБ
Pentest, SOC, DevSecOps, bug bounty — работа и проекты от проверенных компаний
Карьера в ИБ →

HackerLab