C++: Doubly linked list
Well, it starts with the name. double_list looks like a list of doubles, not a doubly-linked-list, which would be better named list. Anyway, your code doesn't work as a doubly-linked list, and anyway you have one member too few for that.
But your list isn't a generic list of T, but a specific list of int, so that should be reflected in the name too, leading to list_int. Better to bite the bullet and templatize it.
Use one style for class-names, and use it consistently: Either snake_case like the standard, or UpperCamelCase, but please not a mix.
While you can declare a member and a type at the same time, please desist. It's non-obvious, and mimics the pattern of declaring a tag and a typedef-name at the same time in C and C/C++-combi-headers.
Use C++11 nullptr instead of the obsolete NULL-macro. The latter can result in surprising behavior as it can be a zero constant.
Use consistent indentation. Always indent the same amount, and don't forget to indent / dedent as neccessary.
You can signal an error with the return-value or an exception, depending on whether it is expected. But don't ever try interacting with the user directly from generic library code. It seriously restricts usability.
list_search must return a value on every execution-path. If your compiler didn't complain loudly, you should fix your invocation.
Try to use a for-loop directly instead of simulating it with a while-loop.
I wonder why many of your member-functions drag around the prefix list_ as if they were free C-functions.
list_delete and display leak memory.
You are violating the rule-of-three: Your class manages a resource, except is misses a custom copy-ctor and dtor.
Consider allowing output to a different std::ostream than std::cout. While you are at it, implement the stream-output-operator to conform to the standard stream interface.