为什么可以从不同的cpp文件访问内联成员函数?

时间:2016-08-18 16:23:38

标签: c++ inline

我知道当编译器正在编译调用内联函数的函数时,编译器必须能够访问内联函数定义而不仅仅是内联函数声明。这就是我们通常在头文件中定义函数的原因。

在下面编译main()时,编译器无法访问内联函数定义(Person :: GetFirstName()和Person :: GetLastName()),但它仍然可以编译并运行。

如果我删除或注释掉与Person :: GetString()相关的所有行,那么编译器会按照预期的行为给出内联函数的链接错误(Person :: GetFirstName()和Person :: GetLastName())。

什么是Person :: GetString(),它使得内联函数Person :: GetFirstName()和Person :: GetLastName()的定义可以在另一个cpp文件中访问?

Person.h

#ifndef _PERSON_H_
#define _PERSON_H_

#include <string>

class Person
{
public:
    Person(const std::string& FIRST_NAME, const std::string& LAST_NAME, const size_t& AGE) : firstName(FIRST_NAME), lastName(LAST_NAME), age(AGE){}

    inline const std::string& GetFirstName() const;

    inline const std::string& GetLastName() const;

    const size_t& GetAge() const;

    const std::string GetString() const;
private:
    std::string firstName;
    std::string lastName;
    size_t age;
};
#endif

Person.cpp

#include "Person.h"
#include <sstream>
using namespace std;


inline const string& Person::GetFirstName() const
{
    return this->firstName;
}

inline const string& Person::GetLastName() const
{
    return this->lastName;
}

const size_t& Person::GetAge() const
{
    return this->age;
}

const string Person::GetString() const
{
    ostringstream strm;
    strm << this->GetFirstName() << "\t" << this->GetLastName() << "\t" << this->age;
    string result = strm.str();
    return result;

}

Main.cpp的

#include <iostream>
#include "Person.h"
using namespace std;

int main()
{
    Person person("Jack", "Smith", 26);

    cout << "First Name: " << person.GetFirstName() << endl;
    cout << "Last Name: " << person.GetLastName() << endl;
    cout << "Age: " << person.GetAge() << endl;
    cout << endl;
    cout << person.GetString() << endl;
    return 0;
}

我正在使用Visual Studio Professional - 2103 真的很感激这方面的任何帮助。 谢谢。

0 个答案:

没有答案