Escreva uma classe chamada Pessoa que contenha os atributos privados denominados em C++

Seu programa tem apenas um problema. Falta de atenção.

Por exemplo, ele tem o seguinte bug:

cout << "sexo: " << peso << endl;
cout << "Peso: " << altura << endl;
cout << "Altura: " << sexo << endl; 

Que confusão é essa aí que você fez?
De qualquer maneira, dei uma ajeitada . Tire fora as coisas que estou imprimindo a mais e pus só para poder ver por que é que seu programa não estava rodando.

#include<iostream> //biblioteca
#include <string>
using namespace std;

class Pessoa {
private:
	string nome;
	double peso,altura; //variável
	char sexo;

public:
	Pessoa(){ //cria o construtor objeto

	}
	virtual bool setPeso (double valor) {
		if (peso >= 0.0 && peso < 200.0) {
			peso = valor;
			return true;
		} else {
			return false;
		}
	}
	virtual double getPeso() {
		return peso;
	}

	virtual bool setaltura (double valor) {
	    cout << "altura = " << valor << endl;
		if (valor >= 0.50 && valor < 240.0) {
			altura = valor;
			cout << "Dentro" << endl;
			return true;
		}else {
			cout << "Fora" << endl;
			return false;
		}
	}
	virtual double getaltura() {
		return altura;
	}

	bool setsexo (char valor) {
		if (valor == 'M' || valor == 'F'){
			sexo = valor;
			return true;
		} else {
			return false;
		}
	}
	virtual char setsexo() {
		return sexo;
	}
	void setNome(string n){ //recebe o valor do int main
		nome = n;

	}

	string getNome(){
		return nome;
	}

	void print(){ //mostra o valor na tela
		cout << "-------------\n";
		cout << "Nome: " << nome.c_str() << endl;
		cout << "sexo: " << sexo << endl;
		cout << "Peso: " << peso << endl;
		cout << "Altura: " << altura << endl;
	}
};

int main(){
	Pessoa p; // chama o construtor-padrão
	double peso,altura;
	string nome;
	char sexo;
	cout << "Digite o nome: ";
	getline(cin, nome);
	cout << "Digite o peso: ";
	cin >> peso;
	cout << peso << endl;
	cout<< "Digite a altura: ";
	cin >> altura;
	cout << altura << endl;
	cout << "Digite o sexo: ";
	cin >> sexo;
	cout << sexo << endl;
	p.setNome(nome);
	if (!p.setPeso(peso)) {
	    cerr << "Peso fora dos limites" << endl;
	}
	if (!p.setaltura(altura)) {
	    cerr << "Altura fora dos limites" << endl;
	}
	if (!p.setsexo(sexo)) {
	    cerr << "Sexo fora dos limites" << endl;
	}
	//envia o valor para void setNome
	p.print(); //enviar o resultado para void print()
} //fim 

Cara agora ta mostrando na tela 2 veses o peso tipo ele pede digite o peso = ele digito o valor exemplo 2 aparece 2 duas vese.

Sim, ele mostra 2 vezes o peso. Mas eu disse que era para você tirar as coisas que eu pus que eram só para ver onde estavam os erros. Acho que você é esperto suficiente para tirar essas coisas que pus a mais; basta você comparar o seu programa com as minhas alterações.

Beleza consegui tirar mais o nome tipo la enuciado fala tem atribuir no mínimo 2 caracteres como fazer para quando o usuário digita 1 o programa da erro.

Veja a documentação da classe basic_string. Ela diz que você tem um método "size" ou "length" (são sinônimas) que retorna a quantidade de caracteres da string. Portanto, este código aqui:

string s = "folgado demais";
cout << s.size() << endl;

deve imprimir 14.

Vou trancar esta thread, para você aprender alguma coisa sozinho.