С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/9: Рейтинг темы: голосов - 9, средняя оценка - 5.00
7 / 6 / 1
Регистрация: 29.10.2016
Сообщений: 175

Многократно определенный символ

13.10.2018, 11:06. Показов 1872. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Приветствую!
Проект разбит на 3 файла:
Substrance.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Substance{
    friend Substance operator + (Substance& x, Substance& y);
private:
    char* matter;
    char* type;
    double ftemp;
    double stemp;
public:
    Substance(char* = 0, char* = 0, double = 0, double = 0);    
    Substance(const Substance&);
    int operator == (const Substance&);
    Substance& operator = (const Substance&);
    char* GetM();
    char* GetT();
    double GetF() { return ftemp; }
    double GetS() { return stemp; }
    void Set(char*,char* ,double ,double);
    void Show();
    ~Substance();
};

Substrance.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
#include "Substance.h"
#include "stdio.h"
#include <cstring>
 
Substance::Substance(char* str, char* let, double x, double y) {
    if (str) {
        matter = new char[strlen(str) + 1];
        strcpy(matter, str);
    }
    else
        matter = 0;
    if (let) {
        type = new char[strlen(let) + 1];
        strcpy(type, let);
    }
    else
        type = 0;
    ftemp = x;
    stemp = y;
    printf("The default constructor have worked\n");
}
Substance::Substance(const Substance& newbie) {
    if (!newbie.matter || !newbie.type)
        printf("Error class determination doesn`t finished\n");
    else {
        delete[] matter;
        matter = new char[strlen(newbie.matter) + 1];
        strcpy(matter, newbie.matter);
        delete[] type;
        type = new char[strlen(newbie.type) + 1];
        strcpy(type, newbie.type);
        ftemp = newbie.ftemp;
        stemp = newbie.stemp;
        //return newbie;
        printf("The copy constructor have worked\n");
    }
}
char * Substance::GetM()
{
    char* s = new char[strlen(matter) + 1];
    strcpy(s, matter);
    return s;
}
char * Substance::GetT()
{
    char* v = new char[strlen(type) + 1];
    strcpy(v, matter);
    return v;
}
Substance::~Substance() {
    if (matter) delete[] matter;
    if (type) delete[] type;
}
void Substance::Set(char* str, char* let, double x, double y) {
    if (matter != 0) delete[] matter;
    if (str) {
        matter = new char[strlen(str) + 1];
        strcpy(matter, str);
    }
    else
        matter = 0;
    if (type != 0) delete[] type;
    if (let) {
        type = new char[strlen(let) + 1];
        strcpy(type, let);
    }
    else
        type = 0;
    if (x <= y && x >= -273.0) {
        ftemp = x;
        stemp = y;
    }
    else
        y = x;
}
void Substance::Show() {
    printf("%s %s %f - %f\n", matter, type, ftemp, stemp);
}
 
Substance& Substance::operator= (const Substance& nw) {
        if (&nw == this) return *this;
            if (nw.matter || nw.type) {
                delete[] matter;
                matter = new char[strlen(nw.matter) + 1];
                strcpy(matter, nw.matter);
                delete[] type;
                type = new char[strlen(nw.type) + 1];
                strcpy(type, nw.type);
                ftemp = nw.ftemp;
                stemp = nw.stemp;
            }
        else
            {
                printf("Error 2nd class isn`t created\n");
            }
        return *this;
}
 
int Substance::operator==(const Substance& y) {
    if (strcmp(matter, y.matter) == 1 && strcmp(type, y.type) == 1 && ftemp == y.ftemp && stemp == y.stemp) return 0;
    else return 1;
}

Main.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#include "Substance.cpp"
#include <iostream>
#include "conio.h"
 
Substance operator+ (Substance& x, Substance& y) {
    Substance buf;
    buf.ftemp = x.ftemp + y.ftemp;
    buf.stemp = x.stemp + y.stemp;
    buf.matter = new char[strlen(x.matter) + strlen(y.matter) + 1];
    strcpy(buf.matter, x.matter);
    strcat(buf.matter, y.matter);
    buf.type= new char[strlen(x.type) + strlen(y.type) + 1];
    strcpy(buf.type, x.type);
    strcat(buf.type, y.type);
    return Substance();
}
int main()
{
    Substance A;
    char ce[20];
    printf("Enter the name of chemical element\n");
    scanf("%s",&ce);
    char tce[2];
    do {
        printf("Enter the type of the chemical element\nM-Metal A-Alloy C-Compoud\n");
        scanf("%s", &tce);
    } while (tce=="M" || tce == "A" || tce == "C");
    double x,y;
    printf("Enter the lower limit of the transition of the substance to the superconducting state\n");
    scanf("%f", &x);
    printf("Enter the upper limit of the transition of the substance to the superconducting state\n");
    scanf("%f", &y);
    A.Set(ce,tce,x,y);
    A.Show();
    char* string= 0;
    double num = 0;
    string = A.GetM();
    printf("Name of chemical element: %s\n", string);
    string = A.GetT();
    printf("Type of the chemical element: %s\n", string);
    num = A.GetF();
    printf("Lower temperature: %f\n", num);
    num = A.GetS();
    printf("Higher temperature: %f\n", num);
    printf("Try to copy from A to B with '='\n");
    Substance B;
    B = A;
    printf("A:");
    A.Show();
    printf("B:");
    B.Show();
    printf("Lets compare this objects with '=='\n");
    int rez = 0;
    rez = A == B;
    if (rez == 0)printf("Theyre equal\n");
    else printf("Theyre not equal\n");
    printf("Finally, let's put them together\n");
    Substance C;
    C = A + B;
    C.Show();
    _getch();
    return 0;
}
Возникает ошибка LNK2005 на все методы класса в Substance.h, будто они уже определены в Main.obj в файле Substance.obj
LNK1169 многократно определенный символ в Main.exe
Помогите исправить ошибки,пожалуйста.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
13.10.2018, 11:06
Ответы с готовыми решениями:

Многократно определенный символ
Здравствуйте! У меня в модуле объявлено две функции. Одну из них я вызываю в мэйн. При сборке появились ошибки: 1. ...

Многократно определенный символ. Где?
Подскажите пожалуйста, где многократно определенный символ? Начал разбираться в работе с классами, но вот ошибка не даёт покоя, в чем...

Обнаружен многократно определенный символ - один или более
Здравствуйте. Выскакивает ошибка: error LNK1169: обнаружен многократно определенный символ - один или более. А из-за чего не пойму....

6
Модератор
Эксперт С++
 Аватар для zss
13770 / 10963 / 6491
Регистрация: 18.12.2011
Сообщений: 29,240
13.10.2018, 12:11
В main
Цитата Сообщение от Battary Посмотреть сообщение
#include "Substance.cpp"
C++
1
#include "Substance.h"
И настоятельно рекомендую подключать сначала системные заголовки, а потом свои!

C++
1
2
    scanf("%f", &x);
    scanf("%f", &y);
Для double надо
C++
1
2
    scanf("%lf", &x);
    scanf("%lf", &y);
1
Заблокирован
13.10.2018, 12:13
Цитата Сообщение от zss Посмотреть сообщение
И настоятельно рекомендую подключать сначала системные заголовки, а потом свои!
Зачем?
0
Модератор
Эксперт С++
 Аватар для zss
13770 / 10963 / 6491
Регистрация: 18.12.2011
Сообщений: 29,240
13.10.2018, 12:18
Имена в локальном файле случайно могут оказаться такими же, как и в каком-то из глобальных.
0
7 / 6 / 1
Регистрация: 29.10.2016
Сообщений: 175
13.10.2018, 13:25  [ТС]
Что-то не помогло, я сначала подключаю Substance.h в Substance.cpp, а потом уже Substance.cpp в Main.cpp, так как include по сути просто копирует текст на место include.
Собственно, ошибки все-еще есть, попробую чтоль пересоздать проект.

Добавлено через 5 минут
Проект пересоздал, ошибка только 1010 связанная с непредвиденным концом файла предкомпилированного заголовка pch.h
Ошибка в файле Substance.cpp в последней строке

Добавлено через 24 минуты
Я понял закономерность, ошибки зависят от положения pch.h
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
13.10.2018, 13:49
Лучший ответ Сообщение было отмечено Battary как решение

Решение

Battary, вы не должны подключать cpp через include.

Добавлено через 3 минуты
Цитата Сообщение от Battary Посмотреть сообщение
include по сути просто копирует текст на место include.
Если вы это понимаете, то почему же никак не разберетесь в причинах ошибки?
У вас в проекте получилось два объектных файла, содержащих абсолютно одинаковые определения - Substance.obj и Main.obj. В Main.obj они попали из-за вашего include "Substance.cpp".
0
7 / 6 / 1
Регистрация: 29.10.2016
Сообщений: 175
13.10.2018, 13:53  [ТС]
Спасибо DrOffset, не знал, что файлы cpp не нужно подключать, все заработало.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
13.10.2018, 13:53
Помогаю со студенческими работами здесь

LNK1169: обнаружен многократно определенный символ - один или более
Всем привет. Кто знает, из-за чего может быть такая ошибка? Main: #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include...

Обнаружен многократно определенный символ - один или более Visual Studio
Добрый день! Смотрите) Есть заголовочный файл, который по сути пустой using namespace std; class Zak { public: }; и файл cpp,...

fatal error LNK1169: обнаружен многократно определенный символ - один или более
код который показан снизу я компилировал в двух программах на visual c++ и dev c++ в dev c++ всё прошло успешно но в visual c++ выдаёт...

Fatal error LNK1169: обнаружен многократно определенный символ - один или более
При компиляции возникает ошибка: 1&gt;Исходный код.obj : error LNK2005: &quot;public: __thiscall Dates::~Dates(void)&quot; (??1Dates@@QAE@XZ)...

fatal error LNK1169: обнаружен многократно определенный символ - один или более
Искала в интернете решение этой проблемы, находила похожие, но не помогло своей... В общем. Проект windows form. Есть два заголовочных...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru