[英]C++ Interface Compiling
编辑:
我想出了解决方案。 我没有在编译指令中添加-combine,而是生成了错误。
我正在研究Deitel和Deitel书《 C ++ How to Program》,并遇到了使用g ++构建和编译C ++接口的问题。 问题是,我已经在.h文件中声明了该类,并在.cpp文件中定义了实现,但是当我尝试编译编写的测试文件时,我无法弄清楚如何使其能够正常工作。 我收到的g ++错误是:
Undefined symbols:
"GradeBook::GradeBook(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)", referenced from:
_main in ccohy7fS.o
_main in ccohy7fS.o
"GradeBook::getCourseName()", referenced from:
_main in ccohy7fS.o
_main in ccohy7fS.o
ld: symbol(s) not found
collect2: ld returned 1 exit status<
如果有人能指出我正确的方向,我将不胜感激。
我的头文件:
//Gradebook 6 Header
//Purpose is to be the class declaration for the class Gradebook 6
//Declare public, privates, and function names.
#include //the standard c++ string class library
using std::string;
//define the class gradebook
class GradeBook
{
public: //all the public functions in the class
GradeBook(string ); //constructor expects string input
void setCourseName (string ); //method sets course name--needs string input
string getCourseName(); //function returns a string value
void displayMessage(); //to console
private: //all private members of the class
string courseName;
}; //ends the class declaration
我的.cpp文件是:
//Gradebook 6
// The actual implementation of the class delcaration in gradebook6.h
#include
using std::cout;
using std::endl;
#include "gradebook6.h" //include the class definition
//define the class gradebook
GradeBook::GradeBook(string name) //constructor expects string input
{
setCourseName(name); //call the set method and pass the input from the constructor.
}
void GradeBook::setCourseName (string name) //method sets course name--needs string input
{
courseName = name; //sets the private variable courseName to the value passed by name
}
string GradeBook::getCourseName() //function returns a string value
{
return courseName;
}
void GradeBook::displayMessage() //function does not return anything but displays //message to console
{
cout //message here, the pre tag isn't letting it display
} //end function displayMessage
最后,我编写了用于实现接口并对其进行测试的测试文件。
// Gradebook6 Test
// Program's purpose is to test our GradeBook5 header file and file seperated classes
#include
using std::cout;
using std::endl;
#include "gradebook6.h" //including our gradebook header from the local file.
//being program
int main()
{
//create two gradebook objects
GradeBook myGradeBook1 ("CSC 101 Intro to C++ Programming"); //create a default object using the default constructor
GradeBook myGradeBook2 ("CSC 102 Data Structures in C++");
//display intitial course name
cout //another output message here that the code tag does not like
return 0;
}
看起来您只需要在GradeBook.cpp对象文件中链接到最终的可执行文件即可。 想要发布您的Makefile或构建方式吗?
您看到的是链接器错误(指示在“返回的ld”位中:ld是链接器)。 您需要将所有.cpp文件提供给g ++,以便它将进行编译和链接,或者使用后者的-c开关从.cpp中创建一个.o,然后在另一个g ++命令上使用THAT .o进行构建(链接)可执行文件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.