First off, if you haven't made any games, start small before making any big games.
If you're set on not using a game engine, you need to find out what game engines can do, figure out which of those things you're game will need, then decide if it's worth it to spend time programming those things into your game yourself. If so then great, if not then you'll need to use an engine.
Definitely post your code here so we can take a look at it. I'll be happy to try and find a problem. Without that, it's really hard to help you.
If you're interested, I made my own C++ Tetris clone and posted it online with the source code. If you want to see how I've solved some of the problems you could take a look. It's hosted here https://sourceforge.net/projects/dujekcgames/files/
But, like yours. It was one of my first projects in C++, and as such it's very badly put together. Using header files wrong and with no classes so don't think thats the right way to do it. I could go back now and make it a million times better.
Out of interest, what are you using to render your game? I used SFML.
I've been doing the same thing. But I wasn't worried about making "cliche" games.
The first game I made in C++ was Snake. Which was pretty simple and really just a test to see if I could properly use C++ and SFML.
Then I made Tetris, which wasn't too difficult but it took me a while to get the program design right.
Next it was Asteroids. Which was really cool, I used vectors and matrices, it's probably the first real use I've had out of my high school maths course.
And currently, I'm making Breakout. Which has turned out to be a much bigger project than the previous games. I've almost finished it. But I'm about to start adding functionality to my level editor which could take a while.
In my opinion, if you're just starting out, you should stick to classic ideas because that way when you're testing you have references that can tell you exactly what the game should be doing. You can still be creative and make changes, but for programming the core game knowing exactly what you're trying to build (i.e having requirements) will make things go a lot smoother. And it's a lot easier to get feedback about your game when people know the general concept of the game.
If you do that, then quickly you'll get better and be able to start making more and more complicated games which can incorporate strange and cool ideas that you've had. I'm quite excited to start learning 3D programming for example.
To answer your question, games I'm considering making next are Pacman (Because I haven't ever implemented AI), Mario (Because making levels would be an interesting challenge), Bust-a-Move (Because I would want to play that game!) and a pool game (Because of the cool physics it would use). I was going to make Space Invaders but I already made a rough prototype in Python and I think I wouldn't be pushing myself enough if I spent time on Space Invaders since it wasn't too difficult, the only challenging part would be making a level editor, which would be very similar to my breakout editor.
For reference, if you're interested. The source code and .exe files for my first 3 projects are online here https://sourceforge.net/projects/dujekcgames/files/ they only work on Windows7 32. They're poorly done though. It feels like every time I learn something new everything I've done up to that point becomes terrible. For instance, I didn't understand how to use header files properly until I started making breakout so my first 3 C++ projects have few classes and header files with no accompanying .cpp files and functions coded inside the .h file.
I haven't tried SDL but I'm a beginner too and have been using SFML. I just made the transition from 1.6 to 2.0 after making a few projects in 1.6 and nothing really major changes so I'd recommend starting with 1.6 (which has tutorials) then switching once you're familiar with it.