2017-12-17 71 views
0
main.cpp: In function ‘void PrintVector(std::vector<std::__cxx11::basic_string<char> >&, bool)’: 
main.cpp:16:41: error: overloaded function with no contextual type information 
    std::cout << ((newline)? (std::endl) : ""); 
             ^~ 

왜 std :: endl 및 조건부 - 문자열에서 문자열을 좋아합니까?std :: cout do not't std :: endl 및 문자열 조건부 - 경우

+0

삼항 연산자는 같은 유형의 결과 값을 필요로 코드 –

+1

공유하시기 바랍니다. – user0042

+0

여기에 삼항 연산자를 사용하는 성능상의 이유도 없습니다. '? :'와 if-else-statement의 차이점은 I/O 연산의 비용에 의해 영향을받습니다. –

답변

0

나는 그것을 변경 빈 문자 상수 ".

와 솔루션 조건부 경우 한 다음 선호하는 것이 너무 복잡하다 :

if (newline) std::cout << std::endl; 
2

std::endl은 스트림 조작기입니다. 그것은 함수입니다. 일반적인 유형은 ""입니다. 따라서 조건식의 두 가지 유형이 될 수 없습니다. 공통 유형은 전체 표현식의 유형이기 때문에.

새 라인을 추가하는 것 외에 std::endl이 모두 필요하지 않을 수도 있으므로, 새 라인을 인쇄하려면 "\n"으로 바꾸십시오. 그런 식으로 공통 유형은 모든 일반 변환이 피연산자에 대해 수행 된 후에 const char*으로 추론 될 수 있습니다. '(빠를 것이다) :

std::cout << (newline? '\n' : '') << std::flush; 

때문에'

std::cout << (newline? "\n" : "") << std::flush; 

그것을 쓸 수 없습니다 : 비어에 "오류를 리드 '