Sourse files.Двойное определение функций С++

336
17 мая 2017, 08:53

По заданию, мне нужно написать Sourse file.cpp, и в него записать функции.Что я собственно и зделал. Но при компиляции, у меня вылазит ошибка: Как ето исправить?

*
    1>functions.obj : error LNK2005: "void __cdecl arr_input(int *,int)" (?arr_input@@YAXPAHH@Z) уже определен в Functions c++ mass.obj
    1>functions.obj : error LNK2005: "int __cdecl arr_max(int *,int)" (?arr_max@@YAHPAHH@Z) уже определен в Functions c++ mass.obj
    1>functions.obj : error LNK2005: "int __cdecl arr_min(int *,int)" (?arr_min@@YAHPAHH@Z) уже определен в Functions c++ mass.obj
    1>functions.obj : error LNK2005: "void __cdecl arr_out(int *,int)" (?arr_out@@YAXPAHH@Z) уже определен в Functions c++ mass.obj
    1>functions.obj : error LNK2005: "void __cdecl arr_reverse(int *,int)" (?arr_reverse@@YAXPAHH@Z) уже определен в Functions c++ mass.obj
    1>functions.obj : error LNK2005: "int __cdecl arr_sum(int *,int)" (?arr_sum@@YAHPAHH@Z) уже определен в Functions c++ mass.obj
    1>C:\Users\Galya\Documents\Visual Studio 2017\Projects\Functions c++ mass\Debug\Functions c++ mass.exe : fatal error LNK1169: обнаружен многократно определенный символ - один или более
*

Вот код основного файла.

// Functions c++ mass.cpp: определяет точку входа для консольного приложения.
//
#include "stdafx.h"
#include<iostream>
#include"functions.cpp"
using namespace std;
int main()
{
    const int m = 5;
    int arr[m];
    arr_input(arr,m);
    arr_out(arr, m);
    return 0;
}

//код functions.cpp

#include "stdafx.h"
#include <iostream>
using namespace std;
void arr_out(int *a,int n)
{
    for (int i = 0; i < n; i++)
    {
        cout << a[i] << " ";
    }
}
void arr_input(int*a,int n)
{
    for (int i = 0; i<n; i++)
            cin >> a[i];
}
int arr_sum(int*a, int n)
{
    int sum = 0;
    for (int i = 0; i < n; i++)
        sum += a[i];
    return sum;
}
int arr_max(int*a, int n)
{
    int maxArr;
    maxArr = a[0];
    for (int i = 0; i < n; i++)
    {
        if (a[i]>maxArr)
        {
            maxArr = a[i];
        }
    }
    return maxArr;
}
int arr_min(int*a, int n)
{
    int minArr;
    minArr = a[0];
    for (int i = 0; i < n; i++)
    {
        if (a[i]>minArr)
        {
            minArr = a[i];
        }
    }
    return minArr;
}
void arr_reverse(int*a, int n)
{
    for (int i = 0; i < n; i++)
    {
        swap(a[i], a[n - i]);
    }
    for (int i = 0; i < n; i++)
    {
        cout << a[i] << " ";
    }
}
Answer 1

1) В качестве файла с функциями принято использовать header file (.h/.hpp). Попробуйте создать этот файл, та записать эти функции, и его подключить. 2) Если не помогло, попробуйте убрать stdafx.h

Answer 2

В вашем проекте имеется две единицы компиляции: основная с функцией main и модуль functions.cpp. Так как вы включили модуль functions.cpp в основной модуль, то эти определения функций появляются в проекте дважды.

Вам следует объявить все ваши пользовательские функции в заголовочном файле, например, в файле functions.h. Этот заголовочный файл с помощью директивы #include включить в основной модуль и в модуль functions.cpp, где эти функции будут определены. А сам модуль functions.cpp никуда не включать с помощью директивы #include.

READ ALSO
массивы в WebAssembly

массивы в WebAssembly

Как передать массив строк (char [10][10]) из модуля C, оттранслированного в WebAssembly, в модуль javascript и обратно?

280
Как вывести таблицу соответствия?

Как вывести таблицу соответствия?

Как вывести таблицу соответствия градусов по Цельсию градусам по Фаренгейту, так чтобы пределы и шаг вводится пользователем с экранаВ получившейся...

289
SlimerJS: script is missing

SlimerJS: script is missing

Здравствуйте, У меня последняя версия Mozilla(540

347