Fetching specific foreign exchange rates from fixer using curl and jsconcpp in C++
These are C headers

#include &lt;string.h&gt;
#include &lt;stdio.h&gt;


You should probably use the C++ version (I hope you are not using C-String anywhere).

#include &lt;strings&gt;
#include &lt;cstdio&gt;


Header include paths

#include &lt;jsoncpp/json/json.h&gt;


This should probably be json/json.h and you should specify the location where jsoncpp is installed with compiler flags. 

Curl is a C library.

Therefore any callbacks should be C functions (not C++ functions). There is no guarantee in the standard thay they use the same ABI.

static size_t WriteCallback(void *contents, size_t size, size_t nmemb, void *userp)


Should be:

extern "C" size_t WriteCallback(void *contents, size_t size, size_t nmemb, void *userp)


Never use C-Casts

C casts are hard to spot (in general). But also using C++ casts you can mark dangerious casts by uisng the appropriate cast. 

    ((std::string*)userp)-&gt;append((char*)contents, size * nmemb);


I would use reinterpret_cast&lt;&gt; here. So that it is easy to spot and you intuitively know that this is a dangerous operation.

reinterpret_cast&lt;std::string*&gt;(userp)-&gt;append(static_cast&lt;char*&gt;(contents), size * nmemb);


Always check error codes.

All the following return an error code. You should validate these functions worked by checking this error code.

 curl_global_init( CURL_GLOBAL_ALL );
 curl_easy_setopt(myHandle, CURLOPT_URL, "http://api.fixer.io/latest?symbols=USD,GBP");
 curl_easy_setopt(myHandle, CURLOPT_WRITEFUNCTION, WriteCallback);
 curl_easy_setopt(myHandle, CURLOPT_WRITEDATA, &amp;readBuffer);


Prefer "\n" over std::endl

 std::cout&lt;&lt;"\nSucess parsing json\n"&lt;&lt;std::endl;
 std::cout &lt;&lt; root&lt;&lt; std::endl;
 std::cout &lt;&lt;"Base = "&lt;&lt; root["base"].asString() &lt;&lt; std::endl;
 std::cout &lt;&lt;"Date = "&lt;&lt; root["date"].asString() &lt;&lt; std::endl;
 std::cout &lt;&lt;"Rate GBP ="&lt;&lt; root["rates"]["GBP"].asFloat() &lt;&lt; std::endl;
 std::cout &lt;&lt;"Rate USD ="&lt;&lt; root["rates"]["USD"].asFloat() &lt;&lt; std::endl;


The difference is that std::endl also calls std::flush on the stream. There is no need to flush the stream manually. The stream is designed to flush when it needs too. When you do it manually you will make your code much more eneficent.    

RAII

 myHandle = curl_easy_init ( ) ;
 // STUFF
 curl_easy_cleanup( myHandle );


When you see this pattern. You should be thinking of using RAII. This will make sure your resources are cleaned up correctly in all situations (including when exceptions are thrown) are the function returns early (aka return 1;).