0

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

“致命错误: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++ prime 5th edition,教会了我以这种方式定义一个类。这是错的吗?为什么我不能运行这个程序?

4

4 回答 4

2

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

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

于 2013-05-23T05:48:43.083 回答
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/

于 2013-05-23T06:05:39.670 回答
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;
}

主文件

#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

于 2013-05-23T06:34:13.107 回答
0

请参阅此链接

此链接中的几行:

如何声明一个类

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

  1. 创建一个包含类声明的头文件
  2. 创建一个包含该类的任何功能的 C++ 文件
  3. 从正在开发的 C++ 应用程序调用标头
  4. 编译包含类功能和新应用程序的文件
于 2013-05-23T06:12:49.003 回答