0

我正在上编程 101 课程,我有一个作业要做,我要修改以下示例文件。我不是在这方面寻求帮助,因为我想我知道我必须对文件做什么。我的问题是给定的文件(都是从文本中手动键入并直接从给定的示例文件中复制/粘贴)导致相同的错误。

据我所知,该示例是将头文件设置为可重用(如头文件一样)。然后调用 header 获取课程名称并将其插入欢迎消息中。

我正在使用 Code::Blocks 16.01。我选择了本书推荐的 GNU GCC Compiler (C++11)(Pearson 产品)。我已经将我的项目设置为控制台应用程序,并且我运行的所有其他代码都是相同类型的应用程序,并且已经编译/工作没有错误。我已经使用拆分源代码和头文件做了两个示例。最后一个工作完美。所以我不确定出了什么问题。

构建日志

-------------- Build: Debug in PE3-11 (compiler: GNU GCC Compiler)---------------
mingw32-g++.exe  -o bin\Debug\PE3-11.exe obj\Debug\GradeBook.o   
C:/Program Files (x86)/CodeBlocks/MinGW/bin/../lib/gcc/mingw32/4.9.2/../../../libmingw32.a(main.o):main.c:(.text.startup+0xa7): undefined reference to `WinMain@16'
collect2.exe: error: ld returned 1 exit status
Process terminated with status 1 (0 minute(s), 0 second(s))
2 error(s), 0 warning(s) (0 minute(s), 0 second(s))

所以两个问题:

是什么导致了错误?我不应该在某个地方有一个int main()吗?

成绩簿.h

// Fig. 3.11: GradeBook.h
// GradeBook class definition. This file presents GradeBook's public
// interface without revealing the implementations of GradeBook's member
// functions, which are defined in GradeBook.cpp.
#include <string> // class GradeBook uses C++ standard string class
// GradeBook class definition
class GradeBook
{
public:
   explicit GradeBook( std::string ); // constructor initialize courseName
   void setCourseName( std::string ); // sets the course name
   std::string getCourseName() const; // gets the course name
   void displayMessage() const; // displays a welcome message
private:
   std::string courseName; // course name for this GradeBook
}; // end class GradeBook

成绩册.cpp

// Fig. 3.12: GradeBook.cpp
// GradeBook member-function definitions. This file contains
// implementations of the member functions prototyped in GradeBook.h.
#include <iostream>
#include "GradeBook.h" // include definition of class GradeBook
using namespace std;

// constructor initializes courseName with string supplied as argument
GradeBook::GradeBook( string name )
   : courseName( name ) // member initializer to initialize courseName
{
   // empty body
} // end GradeBook constructor

// function to set the course name
void GradeBook::setCourseName( string name )
{
   courseName = name; // store the course name in the object
} // end function setCourseName

// function to get the course name
string GradeBook::getCourseName() const
{
   return courseName; // return object's courseName
} // end function getCourseName

// display a welcome message to the GradeBook user
void GradeBook::displayMessage() const
{
   // call getCourseName to get the courseName
   cout << "Welcome to the grade book for\n" << getCourseName()
      << "!" << endl;
} // end function displayMessage

还有第三个文件,根据本书,它是单独练习的一部分,但似乎是相关的,如下所列。存在的问题是,除了标题的常见用法之外,我看不到这些 .cpp 的链接。但它也包括我预期的int main() 。所以我真的很困惑。

该文件还引用了相同的标题(并且仅适用于构建/项目中的标题),但它创建了两个成绩册对象,然后告诉我们它已经完成了。因此,我不确定以前的 .cpp 缺少什么以使其工作,或者它如何/为什么与这个集成。

// Fig. 3.13: fig03_13.cpp
// GradeBook class demonstration after separating
// its interface from its implementation.
#include <iostream>
#include "GradeBook.h" // include definition of class GradeBook
using namespace std;

// function main begins program execution
int main()
{
   // create two GradeBook objects
   GradeBook gradeBook1( "CS101 Introduction to C++ Programming" );
   GradeBook gradeBook2( "CS102 Data Structures in C++" );

   // display initial value of courseName for each GradeBook
   cout << "gradeBook1 created for course: " << gradeBook1.getCourseName()
      << "\ngradeBook2 created for course: " << gradeBook2.getCourseName()
      << endl;
} // end main
4

0 回答 0