我是C ++的新手并且正在研究Dietel的书。在本书中,它有一些类和接口的示例代码
Gradebook.h
<div class="pricing-customer col-sm-12 col-sm-3 text-center">
<h3><?php echo $t_title; ?></h3>
<p class="pricing-number">$ 70</p>
<br>
<p class="pricing-monthes">per week/month</p>
<p class="pricing-emails">100 000 emails</p>
</div>
Gradebook.cpp
#ifndef GradeBook_h
#define GradeBook_h
#endif /* GradeBook_h */
#include <string>
class GradeBook
{
public:
explicit GradeBook( std::string );
void setCourseName( std::string );
std::string getCourseName() const;
void displayMessage() const;
private:
std::string courseName;
};
的main.cpp
#include <iostream>
#include "GradeBook.h"
using namespace std;
GradeBook::GradeBook( string name )
{
courseName = name;
}
void GradeBook::setCourseName( string name )
{
courseName = name;
}
string GradeBook::getCourseName() const
{
return courseName;
}
void GradeBook::displayMessage() const
{
std::cout << "Welcome to the grade book for " << getCourseName() << std::endl;
}
所以,我正在尝试使用#include <iostream>
#include "GradeBook.h"
using namespace std;
int main()
{
GradeBook gradeBook1("CS 101 Introduction to C++ Programming");
GradeBook gradeBook2("CS 102 Data Structures in C++");
cout << "gradeBook1 : " << gradeBook1.getCourseName() << endl;
cout << "gradeBook2 : " << gradeBook2.getCourseName() << endl;
}
在我的mac终端上编译它。但似乎这不断给我一个错误说
架构x86_64的未定义符号: &#34; GradeBook :: GradeBook(std :: __ 1 :: basic_string,std :: __ 1 :: allocator&gt;)&#34;,引自: _main in main-0602c7.o ld:找不到架构x86_64的符号 clang:错误:链接器命令失败,退出代码为1(使用-v查看调用)
除了构造函数和成员变量之外,我已经尝试去除大多数函数声明和函数实现,但它似乎仍然给了我同样的错误。
我认为我完全从书中复制了代码,但我不明白我做错了什么。任何帮助将不胜感激。
答案 0 :(得分:1)
您必须编译所有来源,因此也要添加您的GradeBook类实现
InvalidOperationException
答案 1 :(得分:-1)
正如上面的例子中已经提到的,在编译代码时你必须提到两个源文件(main.cpp和GradeBook.cpp)。
这样可行。
但是,您的代码中还有一个潜在的问题。
#ifndef GradeBook_h
#define GradeBook_h
#endif /* GradeBook_h */
ifndef-endif内部没有代码。您需要将完整的代码放在ifndef-endif中的.h文件中。否则,当您处理较大的项目并且从多个地方包含GradeBook.h时,您可能会收到重新声明错误。