Size: a a a

IT KPI C/C++ ХВ (не UB)

2021 April 11

YS

Y S in IT KPI C/C++ ХВ (не UB)
Есть дристня на бусте
источник

YS

Y S in IT KPI C/C++ ХВ (не UB)
источник

YS

Y S in IT KPI C/C++ ХВ (не UB)
Можешь там посмотреть
источник

Р

Ростислав in IT KPI C/C++ ХВ (не UB)
Доброго дня. Вопрос знатакам. В мене виникає проблема при шаблонізації класу виникає помилка при додавання шаблону на потоки введеня/виведення. Що в даному коді може бути не так? Буду вдячний будь-якій допомогі.


template<class T>
istream& operator >> (istream& in,Graph<T>& A)
{
   while(true)
   {
       A.vertexs.clear();
       A.visited.clear();
       A.nodes.clear();
       int countV;
       cout<<"Enter count of vertex\n";
       in>>countV;
       if (in.fail())
       {
           cout<<"Введення невірне,спробуйте знову\n";
           in.clear();
           in.ignore();
           continue;
       }
       A.countVer=countV;
       cout<<"Enter vertex\n";
       vector<T> vertex;
       for(int i=0;i<countV;++i)
       {
           T a;
           in>>a;
           vertex.push_back(a);
       }
       if (in.fail())
       {
           cout<<"Введення невірне,спробуйте знову\n";
           in.clear();
           in.ignore(INT_MAX,'\n');
           continue;
       }
       vector<node<T>*> nodes;
       vector<bool> visited;
       for(int i=0;i<countV;++i)
       {
           node<T>* tmpNode=new node<T>(vertex[i]);
           nodes.push_back(tmpNode);
           visited.push_back(false);
       }
       A.nodes=nodes;
       A.visited=visited;
       A.vertexs=vertex;
       cout<<"Вводьте звязки між ввершинами, якщо захочете припинити ввдення введіть -1\n";
       while(true)
       {
           T a,b;
           in>>a;
           if(a==-1 or a=='-' or a=="-1") break;
           in >> b;
           if(b==-1) break;
           if(a>=0 && b>=0)
           {
               if(A.insertEdge(a,b))
               {
                   cout<<"Ребро додано\n";
               }else
               {
                   cout<<"Не вірний запис вершин спробуте ще раз\n";
               }
           }
       }
       if (in.fail())
       {
           cout<<"Введення  невірне,спробуйте знову\n";
           in.clear();
           in.ignore();
           continue;
       }
       return in;
   }
}
template<class T>
ostream& operator << (ostream& s,const Graph<T>& A)
{
   s<<"Кількість вершин= "<<A.countVer<<'\n';
   s<<"Список суміжності кожної вершини\n";
   for(auto V=A.vertexs.begin();V!=A.vertexs.end();++V)
   {
       auto indexV=find(A.vertexs.begin(),A.vertexs.end(),*V);
       if(*V==A.vertexs[indexV-A.vertexs.begin()])
       {
           s<<*V<<':';
           for(auto it=A.nodes[indexV-A.vertexs.begin()]->adjacencyList.begin();it!=A.nodes[indexV-A.vertexs.begin()]->adjacencyList.end();++it)
           {
               s<<(*it)<<' ';
           }
       }
       cout<<"\n";
   }
   return s;
}


А вот і сама ошибка.
Undefined symbols for architecture x86_64:
 "operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, Graph<int> const&)", referenced from:
     _main in main.cpp.o
 "operator>>(std::__1::basic_istream<char, std::__1::char_traits<char> >&, Graph<int>&)", referenced from:
     _main in main.cpp.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[3]: *** [oopGraph] Error 1
make[2]: *** [CMakeFiles/oopGraph.dir/all] Error 2
make[1]: *** [CMakeFiles/oopGraph.dir/rule] Error 2
make: *** [oopGraph] Error 2
источник

RN

Ruslan Neshta in IT KPI C/C++ ХВ (не UB)
где реализация? в цпп?
источник

RN

Ruslan Neshta in IT KPI C/C++ ХВ (не UB)
источник

Р

Ростислав in IT KPI C/C++ ХВ (не UB)
Не, в .h
источник

RN

Ruslan Neshta in IT KPI C/C++ ХВ (не UB)
у тебя ошибка линковки
источник

RN

Ruslan Neshta in IT KPI C/C++ ХВ (не UB)
ты ж инклудишь этот файл в цпп что его юзает?
источник

Р

Ростислав in IT KPI C/C++ ХВ (не UB)
да
источник

Р

Ростислав in IT KPI C/C++ ХВ (не UB)
стоп
источник

Р

Ростислав in IT KPI C/C++ ХВ (не UB)
я в cpp нічого не писав
источник

Р

Ростислав in IT KPI C/C++ ХВ (не UB)
я потом його додаю до main.cpp
источник

Р

Ростислав in IT KPI C/C++ ХВ (не UB)
но без шаблонів все паше
источник

RN

Ruslan Neshta in IT KPI C/C++ ХВ (не UB)
сколько у тебя файлов
источник

Р

Ростислав in IT KPI C/C++ ХВ (не UB)
Graph.cpp Graph.h main.cpp
источник

Р

Ростислав in IT KPI C/C++ ХВ (не UB)
я ше можу додати cmake шо в мене там
источник

RN

Ruslan Neshta in IT KPI C/C++ ХВ (не UB)
ну ошибка выглядит как будто ты эти функции в цпп положил а не в хедер
источник

RN

Ruslan Neshta in IT KPI C/C++ ХВ (не UB)
посмотри мб ты их в неймспейс засунул
источник

RN

Ruslan Neshta in IT KPI C/C++ ХВ (не UB)
они должны быть глобальными
источник