Estoy compilando un proyecto que se desarrolló originalmente con MSVC 2008. Estoy tratando de actualizarlo a MSVC 2017. Cuando intento compilar, veo:

Severity    Code    Description Project File    Line    Suppression State
Error   C2143   syntax error : missing ';' before 'namespace'   Debug Service Group c:\program files (x86)\microsoft visual studio 12.0\vc\include\yvals.h  568 
Severity    Code    Description Project File    Line    Suppression State
Error   C4430   missing type specifier - int assumed. Note: C++ does not support default-int    Debug Service Group c:\program files (x86)\microsoft visual studio 12.0\vc\include\yvals.h  568 

He revisado el CPP y los encabezados y no puedo ver nada obviamente mal, prototipo:

#if !defined(DURATION_H)
#define DURATION_H
////////////////////////////////////////////////////////////////////////////////
/// \class  Duration
/// \brief  Win32 implementation of the Duration class
///
class Duration {
public:
    /// \param  Duration of what we are trying to measure
    Duration(const std::string &a_str = "");
    /// Destructor outputs how long the object was alive
    ~Duration();

private:
    class Writer
    {
    public:                                     // Core is agnostic to the presence of outside world
        Writer(const std::string &a_fileName = "");
        void write(const std::string &a_text) const;
    private:
        std::string m_fileName;         ///< Output file name
    };

    unsigned long m_start;                      ///< Start time
    std::string m_str;                  ///< Duration of what we are trying to measure
};

#endif // defined(DURATION_H)

Implementación:

////////////////////////////////////////////////////////////////////////////////
/// \file   duration.cpp
/// \brief  Concrete (Win32) class implementing Duration
//
//  Revision history:
//
#include <boost/lexical_cast.hpp>

#include "duration.h"

#include "getwindows.h"

#pragma warning(disable: 4996)

////////////////////////////////////////////////////////////////////////////////
/// \class  Duration
/// \brief  Win32 implementation of the Duration class
///
Duration::Duration(const std::string &a_str) :
    m_start(GetTickCount()), m_str(a_str) {
}

/// Destructor outputs how long the object was alive
Duration::~Duration() {
    unsigned long elapsed(GetTickCount() - m_start);
    std::string strElapsed = boost::lexical_cast<std::string>(elapsed);
    Writer w("timingstats.txt");
    w.write(m_str + " took: " + strElapsed);
}

Duration::Writer::Writer(const std::string &a_fileName) : m_fileName(a_fileName) {
}

void Duration::Writer::write(const std::string &a_text) const {
    if (m_fileName.length() > 0) {
        FILE *fd(fopen(m_fileName.c_str(), "ab"));
        if (fd) {                           // Open file in append mode, write the string
            std::string buf(a_text);        // and close the file asap
            buf += "\r\n";
            fwrite(buf.c_str(), buf.size(), 1, fd);
            fclose(fd);
        }
    }
}
c++
0
SPlatten 3 ago. 2020 a las 08:44

1 respuesta

La mejor respuesta

c:\program files (x86)\microsoft visual studio 12.0\vc\include\yvals.h 568 le dice que el error está en un encabezado enviado con una versión anterior de Visual Studio.

Desafortunadamente, se espera que falle, ya que los encabezados antiguos contienen muchos errores de sintaxis que un compilador no conforme como MSVC anterior a VS2015 aún podría manejar, y solo se han solucionado por completo desde VS2017.

Por esa razón, no solo necesitará abrir su proyecto en VS2017, sino también cambiar la cadena de herramientas activa a V141 y limpiar todas las rutas potencialmente codificadas a directorios de inclusión antiguos.

Puede ser más rápido simplemente volver a crear el proyecto desde cero en VS2017, y luego solo volver a agregar los archivos fuente existentes.

1
Ext3h 3 ago. 2020 a las 05:50