ошибка компиляции g++ .h файл

Я пытаюсь скомпилировать файл .cpp, используя g++ в Linux Ubuntu 10.10, и когда я пытаюсь скомпилировать этот код

#include <iostream>                                                             
#include <vector>                                                               
#include <"writeVector.h"                                                       
#include <"insertionSort.h">                                                    
using namespace std;  



int main()                                                                      
{                                                                               
  int n;                                                                        
  int i;                                                                        
  vector<int> V;                                                                
  cout << "Enter the amount of numbers you want to evaluate: ";                 
  cin >> n;                                                                     
  cout << "Enter your numbers to be evaluated: " << endl;                       
  while (V.size() < n && cin >> i){                                             
   V.push_back(i);                                                              
  }   

  InsertionSort(V);                                                             
  write_vector(V);                                                              
  return 0;                                                                     
}   

У меня есть оба файла .h в одной папке, но он продолжает говорить, что мой writeVector.h файл или папка не существует.

Вот как выглядит мой файл writeVector.h

#include <iostream>                                                             
#include <vector>                                                               
using namespace std;                                                            

template <typename T>                                                          

void write_vector(const vector<T>& V)                                          

{                                                  

  cout << "The numbers in the vector are: " << endl;                            
  for(int i=0; i < V.size(); i++)                                                                                                                             
    cout << V[i] << " ";                                                       

}       

insertionSort.h файл

#include <iostream>                                                             
#include <vector>                                                               
using namespace std;                                                            

void InsertionSort(vector<int> &num)                                            
{                                                                               
     int i, j, key, numLength = num.length( );                                  
     for(j = 1; j < numLength; j++)    // Start with 1 (not 0)                  
    {                                                                           
           key = num[j];                                                        
           for(i = j - 1; (i >= 0) && (num[i] < key); i--)   // Smaller values move up                                                                         
          {                                                                     
                 num[i+1] = num[i];                                             
          }                                                                     
         num[i+1] = key;    //Put key into its proper location                  
     }                                                                          
     return;                                                                    
}

person Sean    schedule 01.01.2012    source источник
comment
у вас отсутствует › в ​​первом фрагменте, это опечатка?   -  person T I    schedule 01.01.2012
comment
Было бы лучше включить конкретное сообщение об ошибке, которое вы получаете от компилятора.   -  person sarnold    schedule 01.01.2012
comment
Не помещайте using namespace std; в заголовки, это плохая практика.   -  person Mat    schedule 01.01.2012
comment
@mat я нуб, почему это плохая практика?   -  person Sean    schedule 01.01.2012
comment
@Sean: потому что он извлекает все имена из пространства имен std во весь код, который использует ваши заголовки, а это много имен. На самом деле вам следует вообще не рассматривать using namespace std;, набрав std::, не так уж много проблем.   -  person Mat    schedule 01.01.2012


Ответы (2)


Изменять

#include <"writeVector.h"                                                       
#include <"insertionSort.h">  

to

#include "writeVector.h"                                                       
#include "insertionSort.h"

#include "filename" используется для локальных заголовочных файлов, созданных вами.

#include <filename> используется для заголовочных файлов Глобально включено в C++, системные заголовочные файлы

нет такого синтаксиса, как <"filename">

person Pheonix    schedule 01.01.2012
comment
теперь я получаю эту ошибку: /tmp/ccF0rvjJ.o: в функции main': sandbox.cpp:(.text+0xd1): undefined reference to InsertionSort(std::vector‹int, std::allocator‹int› ›&)’ collect2: ld вернул 1 статус выхода ???????? ????? - person Sean; 01.01.2012
comment
@Sean Это означает, что он успешно скомпилирован. Вы не можете связать его отдельно, так как ваш проект содержит два исходных файла C++. - person David Schwartz; 01.01.2012
comment
Почему вы не можете связать файл в одиночку? Поскольку он не содержит кода для InsertionSort. Как заставить его работать? Либо скомпилировав каждый файл отдельно, а затем соединив их вместе, либо скомпилировав их оба вместе. - person David Schwartz; 01.01.2012
comment
Для справки, исправив вызов от num.length() к num.size() и скомпилировав с использованием g++ sandbox.cpp -o sandbox, я не получаю ошибок компоновщика, и ./sandbox работает, как и ожидалось. - person Johnsyweb; 01.01.2012

#include <"writeVector.h"

Этот код недействителен. Любая из следующих строк будет работать:

#include "wrtieVector.h"
#include <writeVector.h>

но последний зарезервирован для заголовков system.

person Employed Russian    schedule 01.01.2012
comment
я сделал то, что вы сказали, теперь я получаю эту ошибку: /tmp/ccF0rvjJ.o: в функции main': sandbox.cpp:(.text+0xd1): undefined reference to InsertionSort (std::vector‹int, std::allocator‹int› ›&)’ collect2: ld вернул 1 статус выхода ??? ? - person Sean; 01.01.2012
comment
Покажите нам свою команду компиляции Makefile или g++. Мы не можем помочь иначе. - person Basile Starynkevitch; 01.01.2012