我偶然发现了一个奇怪的怪异
animal.h
#ifndef ANIMAL_H
#define ANIMAL_H
#include <string>
#include <iostream>
#include <vector>
#include <memory>
class Animal
{
public:
Animal(std::string aType);
void someFunction();
private:
std::string type;
};
#endif // ANIMAL_H
animal.cpp
Animal::Animal(std::string aType) :
type{aType}
{
}
void Animal::someFunction(){
/*Code*/
}
我在“Animal”类上调用std :: make_shared,参数为std::string
的main.cpp
auto sheep = std::make_shared<Animal>("Sheep");
现在我在animal.cpp类中也有函数。
如果我这样定义sheep
,我就无法调用任何函数。
(sheep->
没有做任何事情。)
我明白了:
no matching function for call to 'Animal::someFunction()'
但是,如果我改变:
auto sheep = std::make_shared<Animal>("Sheep Blabla");
我可以在羊身上调用一个函数。
sheep->someFunction();
给了我Animal类中定义的所有函数。 只需在羊背后加上“Blabla”这个词。
这怎么可能?