You have to provide a default constructor. While you're at it, fix your other constructor, too:
class Name
{
public:
Name() { }
Name(string const & f, string const & l) : first(f), last(l) { }
//...
};
Alternatively, you have to provide the initializers:
Name arr[3] { { "John", "Doe" }, { "Jane", "Smith" }, { "", "" } };
The latter is conceptually preferable, because there's no reason that your class should have a notion of a "default" state. In that case, you simply have to provide an appropriate initializer for every element of the array.
Objects in C++ can never be in an ill-defined state; if you think about this, everything should become very clear.
An alternative is to use a dynamic container, though this is different from what you asked for:
std::vector<Name> arr;
arr.reserve(3); // morally "an uninitialized array", though it really isn't
arr.emplace_back("John", "Doe");
arr.emplace_back("Jane", "Smith");
arr.emplace_back("", "");
std::vector<Name> brr { { "ab", "cd" }, { "de", "fg" } }; // yet another way