В ваших .h
файлах добавьте предварительные объявления для других классов. Когда у вас есть заголовки, включающие друг друга, один фактически не получит включение, иначе они расширились бы, чтобы включать друг друга бесконечно.
Таким образом, в one.h
вы получите:
#pragma once
class two; // removed include, added forward declaration
class one
{
private:
two* t;
public:
one();
};
Затем на самом деле выполните включение в one.cpp
, где вам нужно полное определение двух
#include "one.h"
#include "two.h" // added this include
one::one()
{ t = new two(this);}
Это может быть результатом несовместимости версий .NET Framework между двумя проектами.
Это может произойти двумя способами:
Например, это произойдет, когда приложение настроено для целевой платформы клиентского профиля .Net 4, а проект, на который он ссылается, нацелен на полную структуру .Net 4.
Чтобы прояснить это:
Решение в этом случае - либо обновить структуру target приложения (Project A) или понизить целевую версию ссылочной сборки (Project B). Это нормально, если приложение полной платформы ссылается на сборку платформы профиля клиента или использует ее, но не наоборот (профиль клиента не может ссылаться на целевую сборку полной платформы).
Обратите внимание, что вы также можете получить эту ошибку, когда создаете новый проект в VS2012 или VS2013 (который использует .Net 4.5 в качестве структуры по умолчанию) и:
ссылающиеся проекты используют .Net 4.0 (это часто встречается, когда вы переходите с VS2010 на VS2012 или VS2013, а затем добавляете новый проект)
указанные проекты используют более высокую версию, то есть 4.5.1 или 4.5.3 (вы перенастроили существующие проекты на последнюю версию версия, но VS по-прежнему создает новые проекты, ориентированные на v4.5, а затем вы ссылаетесь на эти старые проекты из нового проекта)
Хорошо, спустя годы, используя VS 2017 .NET Core 2.2 Razor Pages, я чувствую, что этот ответ может кому-то помочь. Если бы это была змея, она бы меня укусила. Я разбрасывал вещи, менял имена, переименовывал модели, и вдруг я получил эту ошибку:
Ошибка CS0246 Не удалось найти тип или имя пространства имен «UploadFileModel» (вы пропустили используя директиву или ссылку на сборку?)
Это было подчеркнуто красным на моей странице .chstml Razor. (не подчеркнуто после исправления):
@page
@model UploadFileModel
Итак, наконец, и к счастью, я нашел код от кого-то еще, что я первоначально использовал, и вот, пространство имен не включает файл .cshtml. name !!!
Вот моя плохая фиктивная ошибка, отшлёпавшая меня именем страницы в пространстве имен:
namespace OESAC.Pages.UploadFile
{
public class UploadFileModel : PageModel
{
То, что было в моем исходном коде, и все, что мне нужно было сделать, это удалить страницу имя из пространства имен, UploadFile:
namespace OESAC.Pages
{
public class UploadFileModel : PageModel
{
И вот, все ошибки исчезли! Дурак я. Но вы знаете, MS сделал этот .NET C # MVC действительно запутанным для нас, не компьютерщиков. Я постоянно спотыкаюсь о своих шнурках, пытаясь выяснить названия моделей, названия страниц и синтаксис, чтобы их использовать. Это не должно быть так сложно. Ну что ж. Я надеюсь, что ошибка и решение поможет кому-то. Ошибка была правильной, нет пространства имен с именем «UploadFileModel», ха-ха.
Вы также можете попробовать удалить код, который, по вашему мнению, у вас вызывает проблемы, и посмотреть, компилируется ли он без ссылок на этот код. Если нет, исправляйте вещи, пока он снова не скомпилируется, а затем верните код предполагаемой проблемы. Иногда я получаю странные ошибки в отношении классов или методов, которые, как я знаю, верны, когда компилятору что-то не нравится. Как только я исправляю то, на чем он действительно зацикливается, эти «фантомные» ошибки исчезают.
Сначала я хотел бы убедиться, что информация вашего проекта не повреждена. Очистите и восстановите свое решение.
Если это не помогает, то в прошлом я видел одну вещь, которую я видел в прошлом для решения проблем с дизайнером, - это открытие проекта форм Windows, а затем его повторное закрытие. Это немного похоже на куриные внутренности, так что не задерживайте дыхание.