当我尝试运行此程序时,我收到错误消息:
“致命错误: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,教会我用这种方式定义一个类。 这是错的吗? 为什么我不能运行这个程序?
答案 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个阶段:
答案 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;
}