Remove all adjacent duplicates in a string using a Stack
std::array

You could use std::array and get rid of max define. In general, I'd like to suggest avoiding defines which can conflict with any stl names by any cost. 

One of Windows header has its own #define max and this is horrible when your code wants std::numeric_limits&lt;int&gt;::max(), std::max({a, b, c}), etc.

Things are even worse if you're writing header only library:

#if defined max
#  undef max
#  define HAD_MAX
#endif 

// ... C++ code ...

#if defined HAD_MAX
#  define max(a, b) ... // copy-paste from Windows.h
#endif


Stack::removeAdjacentDuplicate signature

Signature of Stack::removeAdjacentDuplicate(std::string) can be improved:

At least, it doesn't actually removes anything. It perform some kind of initialization from given string, so consider choosing more intuitive name. 

Additionally, avoid copying parameter - you can use const std::string&amp;

Stack::modifyString

Stack::modifyString also says nothing about its purpose and it also constructs another string instead of modifying something. Consider better naming. 

Use standard library

When copying N characters, consider using standard library functions instead of for loop: strncpy, memcpy, std::copy_n and others works fine, looks clear and may perform some performance optimizations. 

Use standard library (alternative)

As alternative, you can construct new string directly from Stack::stk. There is corresponding constructor: std::string(const char* s, size_t n);. In this case you can pass all std::string parameters by const reference. 

BTW, I'm assure you're already bored with my variable naming suggestions, so I don't need to add another one here :)

Non-const public members are dangerous

Consider using some naming conventions

It's hard to determine whether some variable is a class member or not. In order to simplify your work, make member variables somehow. You can use m_member, member_, etc.