2013-05-23 3 views
0

Когда я пытаюсь запустить эту программу, я получаю сообщение об ошибке сказав:Определение класса в C++

"fatal error: sales_item.h: No such files or directory.

#include <iostream> 
#include "Sales_item.h" 
int main() 
{ 
Sales_item book; 
std::cin >> book; 
std::cout << book << std::endl; 
return 0; 
} 

Что это должно означать? Книга, которую я прочитал, C++ primer 5th edition, научила меня определять класс таким образом. Неправильно? Почему я не могу запустить эту программу?

+0

Это означает, что он не может найти файл sales_item.h. Это не стандартный заголовок или что-то еще. Вы, вероятно, должны сделать это и бросить в той же папке. – chris

+0

Показать файл 'Sales_item.h' (который, возможно, должен быть назван' sales_item.hh'); также покажите, как вы компилируете свой пример и укажите, какой компилятор и система вы используете. –

+0

Это не определение класса. – ChiefTwoPencils

ответ

2

Да, это неправильно.

скажет, что этот код в файл с именем MyFile.cpp, то ваш кусок коды предполагает, что объявление класса находится в файле "Sales_item.h" в той же папке, что и исходный файл MyFile.cpp.

#include фактически директива копирования/вставки, то скопируйте содержимое указанного файла в текущем файле, а компилятор компилирует его. Теперь файл Sales_item.h не существует, и компилятор дает вам сообщение об ошибке, что он не может его найти.

Правильный способ объявить и определить класс:

#include <iostream> 


// #include "Sales_item.h" 
// What should be in the "Sales_item.h" file 

#include <string> 
class Sales_item 
{ 

public: 
    Sales_item(std::string itemName) //constructor 
    { 
     m_Name = itemName; 
    }; 

    const char * GetName() 
    { 
     return m_Name.c_str(); 
    } 

private: //member variables 

    std::string m_Name; 
}; 


// End "Sales_item.h" 


int main() 
{ 

    std::string bookName; 
    std::cin >> bookName; //requires the user to type a string on the command prompt 

    Sales_item book(bookName); //construct the object 
    std::cout << book.GetName() << std::endl; // retrieve & print the item name on the command prompt 
    return 0; 
} 

Еще один момент является то, что в C++ вообще ваши классы объявлены в заголовочном файле (.h/.hpp), и определяется в файле (.cpp). В моем примере класс объявлен и определен в одном файле простым. Это другая тема, чем то, о чем спрашивает ваш вопрос, но читайте больше о «описании vs definition» на C++, если вы хотите получить дополнительную информацию о том, как кодировать хорошие методы кодирования на C++.

Лучший подход, но более сложным, будет кодировать мой пример, как это: https://gist.github.com/jeanmikaell/5636990.

За любую книгу, я рекомендую вам прочитать этот сжатый учебник перед программированием: http://www.cplusplus.com/doc/tutorial/

+0

Я просто храню это как .cpp в каталоге кода, который я хочу запустить? –

+0

Да, все в одном .cpp и компилировать/запускать. Однако, используя наилучшую практику кодирования, мой пример будет закодирован следующим образом: https://gist.github.com/jeanmikaell/5636990. По любой книге я бы рекомендовал вам прочитать это краткое руководство перед программированием: http://www.cplusplus.com/doc/tutorial/ –

2

Это означает, что компилятор не может найти файл с именем Sales_item.h, что вы попросили его, чтобы включить в файл, который вы собираете.

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

+0

Эй, Джерри! Как создать файл? –

+0

@judas: Вы, очевидно, пропустили важную часть книги. Возможно, вернитесь и просмотрите, где они учат тому, как это делать. – ChiefTwoPencils

+0

@C. Ланг, я не думаю, что у меня есть. Просто перечитайте последние несколько страниц. Ничего об этом. –

0

Смотрите эту link.

Несколько строк из этой ссылке:

Как объявить класс

Классы могут быть объявлены в файлах, где они будут в конечном итоге быть использованы. Однако лучше определить их в отдельных файлах. Затем классы могут быть повторно использованы в любом новом приложении.Однако, есть на самом деле 4 этапов в создании и использовании класса C++:

  1. создать заголовочный файл, содержащий объявление класса
  2. создать файл C++, содержащий любую функциональность для класса
  3. вызова заголовок из Приложение C++ разрабатывается
  4. компилировать файлы, содержащие функциональные возможности класса и новое приложение
0

Это правильный способ сделать это

Sales_item.h

#include <string> 
#include <iostream> 

class Sales_item { 
public: 
    Sales_item(){}; 
    ~Sales_item(){}; 
      friend std::istream& operator>> (std::istream &in, Sales_item &si); 
      friend std::ostream& operator<< (std::ostream &out, Sales_item &so); 
private: 
    std::string name; 

}; 

std::istream& operator >> (std::istream &in, Sales_item &si) 
{ 
    in >> si.name; 
    return in; 
} 
std::ostream& operator << (std::ostream &out, Sales_item &so) 
{ 
    out << so.name; 
    return out; 
} 

main.cpp

#include <iostream> 
#include "Sales_item.h" 
int main() 
{ 
    Sales_item book; 
    std::cin >> book; 
    std::cout << book << std::endl; 
    return 0; 
} 

Источник: https://sites.google.com/site/ypwangandy/tv