【问题标题】:C++ Fixing Linker [Error]C++ 修复链接器 [错误]
【发布时间】:2016-07-12 02:09:07
【问题描述】:

我仍在学习如何在头文件中使用类,但遇到了问题。无论出于何种原因,当我运行程序时,都会收到错误“V3_Employee.cpp:(.text+0x3e): undefined reference to `Employee::print(std::string)'”。

我相信这与编译器与 .o 文件的交互或类似的东西有关。

main.cpp

#include <iostream>
#include <string>
#include "V3_Employee.h"    //Including header file of for class Burrito

using namespace std;

int main()
{

    Employee Sean("Sean");

    return(0);

}

员工.h

//Header guard
#ifndef V3_EMPLOYEE_H   //If this header has not already been included in main.cpp
#define V3_EMPLOYEE_H   //Then include the following lines of code

#include <string>

using namespace std;

class Employee  //Creating a class named 'Employee'
    {
        private:

            //Creating variables
            string m_name;

        //Creating a public interface
        public:

            //Creating a Construct
            Employee(string m_name);

            //Creating a 'Member function', another name for a function inside a class              
            void print(string m_name);
    };

endif //代码结束

员工.cpp

#include "V3_Employee.h"
#include <iostream>
#include <string>

using namespace std;

Employee::Employee(string m_name)
    {
        print(name);
    }

void print(string name) //Defining the function 'print'
    {
        cout<<"Name: "<<m_name<<endl; 
    }

我还有另一个几乎完全相同的代码,而是使用整数输入而不是字符串:

main2.cpp

#include <iostream>
#include "V2_Burrito.h" //Including header file of for class Burrito

using namespace std;

int main()
{

    Burrito Test(1);    //Setting 'Test' as an object of class 'Burrito' with an input of '1'

    return(0);

}

Burrito.h

//Header guard
#ifndef V2_BURRITO_H    //If this header has not already been included in main.cpp
#define V2_BURRITO_H    //Then include the following lines of code

class Burrito   //Creating a class named 'Burrito'
    {
        //Creating a public interface
        public:
            //Creating a 'Constructor', or a way to manipulate 'private' data
            Burrito(int a); //This constructor contains 1 input in the form of an integer

            //Creating a 'Member function', another name for a function inside a class
            void setType(int a);
    };

#endif  //End of code

感谢您提供的任何帮助!

【问题讨论】:

  • void print(string name) -> void Employee::print(string name) 在employee.cpp中
  • 您的问题与编译器构造或编译错误无关。

标签: c++ linker-errors


【解决方案1】:

void print(string name) 没有在 Employee 类中定义,所以你的链接器抱怨它找不到它。

您应该将代码更改为:

void Employee::print(string name) {
   ...
}

然后它被定义,链接器会找到这个函数。

顺便说一句,由于你只是打印字符串,最好传递const referense,所以最好写成如下:

void Employee::print(const string& name) {
   ...
}

但也不好,因为print函数是Employee的成员函数,它知道要打印哪个变量,所以最好把你的代码改成:

void Employee::print() {
   cout<<"Name: "<<m_name<<endl;
}

那就有道理了。

【讨论】:

    猜你喜欢
    • 2015-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多