Q:

"no matching function for call" when trying to cin.read into a 2d array

Pixel is a structure containing 3 characters. 
struct Pixel { char r, g, b} ;
int H = 5, C = 10;
Pixel *PMatrix[H]; // Creates an array of pointers to pixels
for (int h = 0 ; r < H ; h++) {
    PMatrix[r] = new Pixel[C]; //Each row points to an array of pixels
}

I have a PPM file, and I'm trying to read the bytes into my matrix of pixels for an image representation, row by row. 
for (unsigned int i = 0; i < height; i++){
    cin.read(PMatrix[i][0], width*3);
}

I've also tried "cin.read(PMatrix[i], width*3);" in the loop.
I get the error no matching function for call to 'std::basic_istream<char>::read(PpmImage::Pixel&, unsigned int)'
What does this mean???

A:

The error is that you have a class you created and you're passing it to a standard library function that doesn't have an overload for it. PMatrix is a Pixel*[], so using [] once gets a Pixel*, and again gives a Pixel. cin.read doesn't know anything about a Pixel and has no operator to deal with it.
Usually, one would overload operator>> for their class and istream.
std::istream& operator>>(std::istream& lhs, Pixel& rhs)
{
    lhs >> rhs.r >> rhs.g >> rhs.b;
    return lhs;
}

//...

cin >> PMatrix[i][0]; //calls our overloaded operator

I'm not sure, but I think you might have been trying to do this:
cin.read(reinterpret_cast<char*>(PMatrix[i]), 3); //ew magic number

Since Pixel is a POD type you can cast it to a pointer to the first element. This would read three chars and store them into PMatrix[i][0]. I recommend using the first method, though. It's more idiomatic and looks less unstable.

