用c ++定义一个类

时间:2013-05-23 05:46:46

标签: c++ class error-handling

当我尝试运行此程序时,我收到错误消息:

  

“致命错误:sales_item.h:没有这样的文件或目录。

#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,教会我用这种方式定义一个类。 这是错的吗? 为什么我不能运行这个程序?

4 个答案:

答案 0 :(得分:2)

这意味着编译器无法找到您要求它包含在您正在编译的文件中的名为Sales_item.h的文件。

据猜测,该书希望您创建一个具有该名称的文件,并将其保存到上面存储源文件的同一子目录中。

答案 1 :(得分: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)文件中定义。在我的示例中,该类已在同一文件中声明和定义为简单。这是一个与您的问题不同的主题,但如果您想了解有关如何使用C ++中的良好编码实践进行编码的更多信息,请阅读C ++中“声明与定义”的更多信息。

最好的方法,但更复杂,就是像我这样编写我的例子:https://gist.github.com/jeanmikaell/5636990

在任何一本书中,我建议你在编程前阅读这篇简明的教程:http://www.cplusplus.com/doc/tutorial/

答案 2 :(得分:0)

请参阅此link

此链接中的几行:

如何声明一个类

可以在最终使用它们的文件中声明类。但是,在单独的文件中定义它们是更好的做法。然后可以在任何新应用程序中轻松地重用这些类。但是,创建和使用C ++类实际上有4个阶段:

  1. 创建包含类声明
  2. 的头文件
  3. 创建一个包含该类
  4. 的任何功能的C ++文件
  5. 从正在开发的C ++应用程序中调用标题
  6. 编译包含类功能和新应用程序的文件

答案 3 :(得分: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