Member 13539619 Ответов: 1

Как справиться с ошибкой связи C++


привет, ребята, ниже мой кусок кода ..он хорошо компилируется, но когда он достигает связывания кода, эта ошибка ирисов ;

hapter9exe42.о
chapter9exe42.o: в функции `main':
chapter9exe42.cpp:(.текст+0x4d): неопределенная ссылка на `Инт продаж::setarr&ЛТ;двойной&ГТ;(дважды*)'
chapter9exe42.cpp:(.text+0x6a): неопределенная ссылка на `void SALES::displayer<double>(double*, int)'
collect2: ошибка: ld вернул 1 статус выхода


пожалуйста, обратите внимание, что моя проблема заключается в связывании кода на терминале

вот заголовочный файл


#ifndef SANS2_H_INCLUDED
#define SANS2_H_INCLUDED
namespace SALES
{
 const int quater = 4;

 struct sale
 {

 double sales[quater];

 double average;

 double max;

 double min;

 };

 void setsale(sale &,const double [],int n);
 template<class T>
 int setarr(T *);

 void displaysale(const sale & s);

template<class T>
 void displayer(T *,int );

}

double average(double*,int );

double max(double *,int );

double min(double *,int );




#endif // SANS2_H_INCLUDED



вот файл, содержащий определения функций


#include <iostream>

#include "SANS2.h"

double average(double * arr,int n)
      {
       double * sum= new double;

       for(int i=0;i<n;i++)
         *sum+=arr[i];

         return (*sum)/n;
      }

double max(double * arr,int n )
      {
        double c;

        c = arr[0];

        for(int i=1;i<n;i++)
         {
          (arr[i]>=c)?c=arr[i]:c=c;
         }

        return c;
      }

double min(double *arr,int n )
      {
       double c;

       c = arr[0];

       for(int i=1;i<n;i++)
       {
        (arr[i]<=c)?c=arr[i]:c=c;
       }

       return c;
      }


 void SALES::setsale(SALES::sale & s,const double arr[],int n)
       {
         for(int i=0;i<n;i++)
          {
           s.sales[i]=arr[i];
          }

         for(int i =n;i<SALES::quater;i++)
          {
           s.sales[i]=0;
          }

         s.average = average(s.sales,n);

         s.max = max(s.sales,n);

         s.min= min(s.sales,n);

       }

template<class T>
int SALES::setarr(T* s)
       {
        int i = 0;

        while(std::cin>>s[i])
        i++;
       }

void SALES:: displaysale(const SALES::sale & s)
       {

        std::cout<<"sales :"<<s.sales<<std::endl;

        std::cout<<"average sales :"<<s.average<<std::endl;

        std::cout<<"mininal sale :"<<s.min<<std::endl;

        std::cout<<"maximal sale :"<<s.max<<std::endl;
       }

      template<class T>
 void SALES::displayer(T *p,int n)
             {
              int i;

              for(i=0;i<n;i++)
              {
               std::cout<<"element "<<i+1<<p[i]<<std::endl;
              }


             }



а вот и главный файл

#include <iostream>

#include "SANS2.h"

static const int  LEN = 100;

int main()
{
 SALES::sale po;

 double arr[LEN];

 int number_of_elements;

 std::cout<<"hey man how are you man :"<<std::endl;

 number_of_elements = SALES::setarr(arr);


 SALES::displayer(arr,number_of_elements);

 return 0;
}


Что я уже пробовал:

я искал в Интернете решение подобных проблем и те которые я нашел я применил его к своему коду но ничего не нашел changed..so я решаю взять его здесь.

спасибо за помощь..

1 Ответов

Рейтинг:
2

Richard MacCutchan

Шаблоны должны быть скомпилированы в файл, где их типы могут быть правильно выведены компилятором. Приведенный выше файл с определениями функций не дает никаких указаний на то, какими должны быть типы шаблонов. Я подозреваю, что это будет по умолчанию int как было предложено в Шаблоны (C++)[^].


Member 13539619

но даже когда я удаляю сам шаблон я все равно получаю ошибку связи

Richard MacCutchan

Ну, я не знаю, что вы имеете в виду, но вы должны убедиться, что все эти функции принимают двойные типы в качестве входных данных и возвращают двойные значения, чтобы соответствовать вызовам, которые вы делаете в своей основной программе. Вы создаете это как единый проект или создаете файл функций как отдельную библиотеку?

Честно говоря, то, что вы создали, выглядит гораздо сложнее, чем должно быть.