我知道当编译器正在编译调用内联函数的函数时,编译器必须能够访问内联函数定义而不仅仅是内联函数声明。这就是我们通常在头文件中定义函数的原因。
在下面编译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 真的很感激这方面的任何帮助。 谢谢。