2017-01-31 4 views
-1

Это мой .h, заголовочный файлошибка преобразования, где он говорит, что никакое преобразование из "полукокса *" не обугливается

#ifndef KINGDOM_H_ 
#define KINGDOM_H_ 

namespace westeros { 

    class Kingdom { 
    public: 
     char m_name[32]; 
     int m_population; 

    }; 

    void display(Kingdom pKingdom[], int kingdomElement, char nameOfKingdom); 

} 
#endif 

Это мой .cpp, исходный файл

#include <iostream> 
#include "kingdom.h" 
using namespace std; 

namespace westeros{ 


    void display(Kingdom pKingdom[], int kingdomElement, char nameOfKingdom){ 

     cout << "------------------------------" << endl; 
     for (int i = 0; i < kingdomElement; i++) { 
      **if(pKingdom[i].m_name == nameOfKingdom){** //it's giving me error right here, visual studio underlining red line below == sign saying operand types are incompatible 
       cout << "Searching for kingdom " << pKingdom[i].m_name << " in Westeros " << endl; 
       cout << "------------------------------" << endl; 
       cout << pKingdom[i].m_name << ", population " << pKingdom[i].m_population << endl; 
      } 
      else { 
       cout << "------------------------------" << endl; 
       cout << "Searching for kingdom " << nameOfKingdom << " in Westeros " << endl; 
       cout << "------------------------------" << endl; 
       cout << nameOfKingdom << " is not part of Westeros." << endl; 
       cout << "------------------------------" << endl; 
      } 
     } 
    } 
} 

и это мой основной файл пытается вызвать его

#include <iostream> 
#include "kingdom.h" 

using namespace std; 
using namespace westeros; 

int main(void) 

{ 

    int count = 0; // the number of kingdoms in the array 

    Kingdom* pKingdoms = nullptr; 

    //allocating dynamic memory 
    pKingdoms = new Kingdom[count]; 

    display(pKingdoms, count, "Mordor"); 
    cout << endl; 

    display(pKingdoms, count, "The_Vale"); 
    cout << endl; 
    delete[]pKingdoms; 
    pKingdoms = nullptr; 

    return 0; 
} 

Может ли кто-нибудь найти, что может быть проблемой?

+0

Вы смущены о разнице между 'char' и строки. Символ «char» является единственным символом (например, буквой). – aschepler

+0

oh так char nameOfKingdom означает, что он может принимать только одну букву? какой тип я бы использовал тогда? –

+0

Большой намек на то, что сказал ашчелер: «Разница между символом« char »и строкой [.]« Два типа в этом утверждении, и вы уже нашли «char», не работали. – user4581301

ответ

2

Ваша проблема заключается в том, что pKingdom[i].m_name является char[32], а тип nameOfKingdom - char. Вы не можете сравнить массив символов с символом.

какой тип я использовал бы тогда?

std::string

+0

Я исправил проблему типа, но теперь это не сработает так, как я хотел. Vale должен находиться в составе westeros, так как он находится в массиве и должен быть распечатан как это pKingdom [i] .m_name << ", population" << pKingdom [i] .m_population << endl; когда он печатается, как если бы он не существовал в массиве. Поэтому я предполагаю, что условие if имеет какую-то проблему. Вы не помогаете –

+0

@GodCoder. Я думаю, вы не использовали @ user2079303 совет для использования ['std :: string'] (http://en.cppreference.com/w/cpp/string/basic_string) и как следствием вы сравниваете адреса. И я добавлю: используйте ['std :: vector'] (http://en.cppreference.com/w/cpp/container/vector) вместо' new [] '. –

+0

Нет, но я использовал строку, хотя, void display (Kingdom Kingdom [], int kingdomElement, string nameOfKingdom), и он все еще не работает –

 Смежные вопросы

  • Нет связанных вопросов^_^