2013-11-13 4 views
0

Эй, ребят я работаю над проектом, и я делал довольно хорошо, пока я не ударил эту стену ..C++ Ошибка: Не была объявлена ​​в области

Я получаю две ошибки:

ошибки: «BinarySearch» не был объявлен в этой области

ошибка: «addInOrder» был не объявлен в этой области

Вот мои файлы, я пытался довольно много вещей с безрезультатно. Помощь будет высоко оценена.

histogram.cpp

#include "histogram.h" 
#include "countedLocs.h" 

//#include "vectorUtils.h" 
#include <string> 
#include <vector> 

using namespace std; 
void histogram (istream& input, ostream& output) 
{ 
    // Step 1 - set up the data 
    vector<CountedLocations> countedLocs; 

    // Step 2 - read and count the requested locators 
    string logEntry; 
    getline (input, logEntry); 
    while (input) 
    { 
     string request = extractTheRequest(logEntry); 
     if (isAGet(request)) 
    { 
     string locator = extractLocator(request); 

     int position = binarySearch (countedLocs, 
         CountedLocations(locator, 0)); 
     /** Hint - when looking CountedLocations up in any kind 
      of container, we really don't care if the counts match up 
      or not, just so long as the URLs are the same. ***/ 

     if (position >= 0) 
     { 
      // We found this locator already in the array. 
      // Increment its count 
      ++countedLocs[position].count; 
     } 
     else 
     { 
      // This is a new locator. Add it. 
      CountedLocations newLocation (locator, 1); 
      addInOrder (countedLocs, newLocation); 
     } 
    } 
     getline (input, logEntry); 
    } 

    // Step 3 - write the output report 
    for (int i = 0; i < countedLocs.size(); ++i) 
    output << countedLocs[i] << endl; 
} 

countedLocs.cpp

#include "countedLocs.h" 
#include <iostream> 
#include <vector> 

using namespace std; 


int CountedLocations::binarySearch(const vector<CountedLocations> list, CountedLocations searchItem) 
{ 
    //Code was here 
} 

int CountedLocations::addInOrder (std::vector<CountedLocations>& vectr, CountedLocations value) 
{ 
    //Code was here 
} 

countedLocs.h

#ifndef COUNTEDLOCATIONS 
#define COUNTEDLOCATIONS 

#include <iostream> 
#include <string> 
#include <vector> 


struct CountedLocations 
{ 

    std::string url; 
    int count; 

    CountedLocations(){ 
    url = ""; 
    count = 0; 
    } 

    CountedLocations(std::string a, int b){ 
    url = a; 
    count = b; 
    } 

    int addInOrder (std::vector<CountedLocations>& vectr, CountedLocations value); 
    int binarySearch (const std::vector<CountedLocations> list, CountedLocations searchItem); 
}; 

inline 
std::ostream& operator<< (std::ostream &out, CountedLocations& cL) 
{ 
    //out << "URL: " << cL.url << " count: " << cL.count << std::endl; 

    out << "\"" << cL.url << "\"," << cL.count; 
    return out; 
} 

#endif 

ответ

1

методы являются методами члены CountedLocations ... использовать something.extractLocator и something.binarySearch или сделать histogram() также должен быть членом метода o F CountedLocations ... (something имеет тип CountedLocations весьма возможно, будет countedLocs[position])

+0

создание объекта, такого как CountedLocations; работает, но для этого проекта мне не разрешено редактировать файл histogram.cpp, так что он отбрасывает меня совсем немного. – user2989158

+0

затем удалите два смежных метода из структуры в файле заголовка.Мне кажется, что они были введены там только для «CPlusPlus -ize» проекта с привязками C. Если вы хотите достичь этой связующей связи, для этой ситуации лучше придерживаться пространств имен, а не структур. – fritzone

1

У вас есть бесплатная функция histogram, в которой вы пытаетесь использовать две функции члена, addInOrder и binarySearch. Чтобы использовать их, вам необходимо иметь экземпляр CountedLocations.

Если это своего рода вспомогательные функции, которые не зависят от фактического CountedLocations, например, я бы превратить их в статические функции, как это (вам нужно только изменить заголовок):

static int addInOrder (std::vector<CountedLocations>& vectr, CountedLocations value); 

И то вы можете вызвать эту функцию, указав тип вашего класса:

CountedLocations::addInOrder(...); 
0

вы пытаетесь вызвать методы члена структуры без объекта этого типа. Странный.

0

Вам нужно посмотреть, что такое пространство имен.

Вы объявляете класс CountedLocations, насколько это хорошо. Но затем вы пытаетесь использовать функции-члены вне пространства имен CountedLocations, которые, очевидно, никогда не будут работать.

int position = binarySearch (countedLocs, 
        CountedLocations(locator, 0)); 

binarySearch является функцией-членом пространства имен CountedLocations. Если вы хотите вызвать эту функцию, вам нужно создать объект, содержащий ссылку на эту функцию-член.

CountedLocation myObject; 
int position = myObject.binarySearch (countedLocs, CountedLocations(locator, 0)); 

Я не знаю, если это решит вашу проблему, но вы должны знать об этом, прежде чем даже пытаться решить проблему.

+0

Это действительно работает, но для в этом проекте мне не разрешено редактировать файл histogram.cpp, так что он меня отбрасывает совсем немного. – user2989158

+0

Тогда вы не должны объявлять эти функции в любом пространстве имен. Просто создавайте функции в ah-файле и включайте их в свой файл histogram.cpp. – fonZ

Смежные вопросы